CodeIgniter计数排除限制条件的查询记录

时间:2016-01-20 01:17:33

标签: codeigniter codeigniter-2

我想在一个查询中做两件事:使用limit()函数,但也获取记录总数作为查询的记录计数,就好像没有使用限制一样。因此,如果总共有21条符合like '%Gregory%'条件的记录,即使我使用limit(10,0),我仍希望返回该值。

这是我的代码:

    $data['recordcount'] = $this->db->count_all_results('assets');
    $this->db->limit(10, 0);
    if(isset($data['order'])){ 
        $query = $this->db->select('*')->from('assets')->or_like($array)->order_by($column, $data['order'])->get();
    }

问题是第一行中的$ data [' recordcount']会返回所有记录。我希望它返回符合第4行查询条件的所有记录,但没有在第2行找到限制。

2 个答案:

答案 0 :(得分:1)

您可以在星号(*)之前实现 SQL_CALC_FOUND_ROWS ,如下所示:

 $this->db->select('SQL_CALC_FOUND_ROWS *')->from('assets')..etc

这将计算在没有LIMIT条件的情况下返回的行数。

之后,您可以立即选择 FOUND_ROWS()

$this->db->select('FOUND_ROWS()')->get();

这将返回您要查找的号码。

有关更多信息,请参阅此页面 enter link description here

答案 1 :(得分:1)

通常count_all_results()在运行时清除select语句。但是通过将第二个参数设置为FALSE,语句将被保留。

我认为这对你有用。

  $this->db->select('*')->from('assets')->or_like($array);
  $data['recordcount'] = $this->db->count_all_results('assets', FALSE);
  $this->db->limit(10, 0);
  if(isset($data['order']))
  {
    $this->db->order_by($column, $data['order']);
  }
  $query = $this->db->get();