【问题标题】:CodeIgniter Count Records for Query that Excludes Limit Condition排除限制条件的查询的 CodeIgniter 计数记录
【发布时间】:2016-01-20 01:17:33
【问题描述】:

我想在一个查询中做两件事:使用 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 行找到的限制。

【问题讨论】:

  • 我建议您为此使用单独的查询。虽然这会花费你一些额外的资源。
  • @javiniar.leonard 是的,我正试图弄清楚如何不使用单独的查询,但这可能是最终唯一的解决方案。

标签: codeigniter codeigniter-2


【解决方案1】:

通常count_all_results() 在运行时会清除选择语句。但是通过将第二个参数设置为 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();

【讨论】:

    【解决方案2】:

    您可以像这样在星号 (*) 之前实现 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

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2013-08-15
      • 1970-01-01
      • 2021-03-15
      • 2011-06-25
      相关资源
      最近更新 更多