2013-01-09 11 views
7

Mam witryny rozwijać w CodeIgniter, aw moim modelu mam funkcję tak:SELECT z ograniczeniem w CodeIgniter

function nationList($limit=null, $start=null) { 
    if ($this->session->userdata('language')=="it") 
    $this->db->select('nation.id, nation.name_it as name'); 
    if ($this->session->userdata('language')=="en") 
    $this->db->select('nation.id, nation.name_en as name'); 
    $this->db->from('nation'); 
    $this->db->order_by("name", "asc"); 
    $this->db->limit($limit, $start); 
    $query = $this->db->get(); 
    $nation = array(); 
    foreach ($query->result() as $row) 
     array_push($nation, $row); 

    return $nation;  
} 

A jeśli w moim kontrolera I wywołać funkcję bez limitu i nie zacząć Wynik zwrotu:

$data["nationlist"] = $this->Nation_model->nationList(); 

Zamiast tego, jeśli ustawię limit i zacznę działać! Jeśli limit i start są zerowe, dlaczego nie zwraca wyniku? Nie chcę wykonywać drugiej funkcji ani kontroli, jeśli limit i start są zerowe. Jak mogę to rozwiązać, gdy limit i start są zerowe bez kontroli lub drugiej funkcji, aby uczynić użyteczny kod i zwiększyć jego wydajność?

+0

Nie sądzę, że to możliwe bez 'if' oświadczeniu. – Mischa

+0

ok ... Mam nadzieję, że zrobię to bez kontroli .. ale dlaczego zapytanie nie zwraca czegoś, gdy limit i start są nulla? @Mischa –

+1

Będziesz musiał spojrzeć na kod źródłowy dla CodeIgniter, ale zakładam '$ this-> db-> limit (null, null);' generuje 'LIMIT 0,0' w MySQL, który zwraca zero wierszy bazy danych . – Mischa

Odpowiedz

15

Spróbuj tego ...

function nationList($limit=null, $start=null) { 
    if ($this->session->userdata('language')=="it") 
     $this->db->select('nation.id, nation.name_it as name'); 

    if ($this->session->userdata('language')=="en") 
     $this->db->select('nation.id, nation.name_en as name'); 

    $this->db->from('nation'); 
    $this->db->order_by("name", "asc"); 

    if($limit!='' && $start!=''){ 
     $this->db->limit($limit, $start); 
    } 
    $query = $this->db->get(); 

    $nation = array(); 
    foreach ($query->result() as $row) 
     array_push($nation, $row); 

    return $nation;  
} 
+0

ok ze sterowaniem Wiem, jak to zrobić, ale chcę wiedzieć, dlaczego zapytanie nie zwraca zapytania i rozwiązać go bez kontroli, jeśli jest to możliwe. –

0

Dalsze zwiedzających:

// Executes: SELECT * FROM mytable LIMIT 10 OFFSET 20 
// get([$table = ''[, $limit = NULL[, $offset = NULL]]]) 
$query = $this->db->get('mytable', 10, 20); 

// get_where sample, 
$query = $this->db->get_where('mytable', array('id' => $id), 10, 20); 

// Produces: LIMIT 10 
$this->db->limit(10); 

// Produces: LIMIT 10 OFFSET 20 
// limit($value[, $offset = 0]) 
$this->db->limit(10, 20); 
Powiązane problemy