2013-01-09 31 views
7

Tôi có một trang web phát triển trong CodeIgniter, và trong mô hình của tôi Tôi có một chức năng như thế này:CHỌN với LIMIT trong 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;  
} 

Và nếu vào bộ điều khiển của tôi, tôi gọi hàm không có giới hạn và bắt đầu không kết quả trả về như sau:

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

Thay vào đó, nếu tôi đặt giới hạn và bắt đầu hoạt động! Nếu giới hạn và bắt đầu là null, Tại sao không trả lại kết quả? Tôi không muốn thực hiện một chức năng thứ hai hoặc một điều khiển nếu giới hạn và bắt đầu là null. Làm cách nào để giải quyết vấn đề này khi giới hạn và bắt đầu là không có kiểm soát hoặc chức năng thứ hai để làm cho mã hữu ích và hiệu quả hơn?

+0

Tôi không nghĩ rằng nó có thể không có một 'tuyên bố if'. – Mischa

+0

ok ... Tôi hy vọng sẽ làm điều này mà không có một điều khiển .. nhưng tại sao truy vấn không trả về một cái gì đó khi giới hạn và bắt đầu là nulla? @Mischa –

+1

Bạn sẽ phải xem mã nguồn cho CodeIgniter, nhưng tôi giả sử '$ this-> db-> limit (null, null);' generate 'LIMIT 0,0' trong MySQL, trả về hàng cơ sở dữ liệu bằng không . – Mischa

Trả lời

15

Hãy thử này ...

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 với kiểm soát Tôi biết làm thế nào để làm nhưng tôi muốn biết tại sao truy vấn không trả về truy vấn và giải quyết nó mà không có một điều khiển nếu có thể đọc câu hỏi được chỉ định –

0

Đối với du khách hơn nữa:

// 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); 
Các vấn đề liên quan