codeigniter active record get query and query without the LIMIT clause

2022-08-31 00:22:34

im使用活动记录,它的所有工作正常,但我想将$data[“totalres”]设置为总结果,我的意思是,相同的查询但没有限制

问题是,当你做一个查询修饰符时,前面的语句被取消设置,所以我甚至不能在得到结果后添加$this->db->limit()。

任何想法?我认为“复制”查询只是为了做到这一点是一种不好的做法

function get_search($start, $numrows, $filter = array())
{    

    ...

    $this->db
    ->select("emp")
    ->from('emp')
    ->join('empr', 'empr.b = empr.id', 'left')
    ->like('code', $code)
    ->limit($numrows, $start);

    ...

    $q = $this->db->get();        

    // number of rows WITHOUT the LIMIT X,Y filter
    $data["totalres"] = ???????;        

    if ($q->num_rows() > 0)
    {        
        $data["results"] = $q->result();
    } else {
        $data["results"] = array();
    }   

    return $data;
}    

答案 1

您可以使用 SQL_CALC_FOUND_ROWS 来获取本来可以返回的行数。请注意行中的 。这告诉CodeIgniter不要尝试用反引号转义子句(因为不是字段,CodeIgniter没有意识到这一点)。LIMIT,FALSEselectSELECTSQL_CALC_FOUND_ROWS

$this->db
->select("SQL_CALC_FOUND_ROWS emp", FALSE)
->from('emp')
->join('empr', 'empr.b = empr.id', 'left')
->like('code', $code)
->limit($numrows, $start);

$q = $this->db->get();

然后,在运行该查询后,我们需要运行另一个查询以获取总行数。

$query = $this->db->query('SELECT FOUND_ROWS() AS `Count`');
$data["totalres"] = $query->row()->Count;

答案 2

试试这个:

function get_search($start, $numrows, $filter = array()){    
    $tmp= $this->db
    ->select("emp")
    ->from('emp')
    ->join('empr', 'empr.b = empr.id', 'left')
    ->like('code', $code)
    ->_compile_select();

    $q= $this->db->limit($numrows, $start)->get();

    // number of rows WITHOUT the LIMIT X,Y filter

    $data["totalres"] = $this->db->query($tmp)->num_rows();

    if ($q->num_rows() > 0){        
        $data["results"] = $q->result();
    } else {
        $data["results"] = array();
    }   
    return $data;
}    

推荐