Php 活动记录中的结果总数和限制

Php 活动记录中的结果总数和限制,php,mysql,codeigniter,activerecord,pagination,Php,Mysql,Codeigniter,Activerecord,Pagination,我正在从数据库中获取一些列表,并将其显示在分页屏幕中。但是对于分页,我需要计算结果的总数。我正在使用Codeigniter和ActiveRecords。我的问题是这样的: $query = $this->db->select('sum(amount) as sum') ->where(date_added between '$from' and '$to') ->group_by('date_added')

我正在从数据库中获取一些列表,并将其显示在分页屏幕中。但是对于分页,我需要计算结果的总数。我正在使用Codeigniter和ActiveRecords。我的问题是这样的:

$query = $this->db->select('sum(amount) as sum')
              ->where(date_added between '$from' and '$to')
              ->group_by('date_added')
              ->get('my_table');
我需要在有限制和无限制的情况下运行此查询,以获取值的总数,并获得有限制的分页输出。现在我需要再次复制查询并使用限制运行它。是否有其他方法可以将完整的查询对象复制到另一个变量并再次调用get

像这样试试看 在控制器中

function yourFunction()
{
$total_rows=$this->modal_name->function_name()->num_rows();
$this->db->limit(1,20); // set you limit here
$rows=$this->modal_name->function_name()->result_array();

}

一种方法是,您可以使用
SQL\u CALC\u FOUND\u ROWS
在您选择带i limit的查询时,还需要运行
FOUND\u ROWS()
,它将给出所有无限制行的计数

$query = $this->db->select('SQL_CALC_FOUND_ROWS sum(amount) as sum')
              ->where(date_added between '$from' and '$to')
              ->group_by('date_added')
              ->get('my_table')
              ->limit($perpage, $start);
那你需要数一数

$query = $this->db->query('SELECT FOUND_ROWS() AS `count`');
echo  $query->row()->count;

您正在寻找活动记录缓存

你习惯于限制。 $this->db->limit($limit,$start);
就性能而言,我建议您最好在一个查询中使用有限的结果和总结果计数,而不是再次运行查询来细化计数,并且为了提高速度,您需要通过为列分配适当的数据类型,为where clauseyah中通常使用的字段分配适当的索引,来实现mysql的主要标准。在某些情况下,这比运行两个quries慢10倍。我一直在寻找这样的东西很长时间了。谢谢大卫:)当然。谢谢你让我知道你解决了你的问题。这比重点更重要我认为你不理解这个问题。这不是如何应用限制。问题是我如何一次又一次地使用同一个查询,并且它已经得到了回答。
public function cache_query() {

$this->db->start_cache();
$this->db->select('sum(amount) as sum')
              ->where(date_added between '$from' and '$to')
              ->group_by('date_added');
$this->db->stop_cache();
}

public function get_query() {

$this->build_query();
$query = $this->db->get('my_table');
$this->db->flush_cache();

}

public function count_query() {
$this->build_query();
$query = $this->db->count_all('my_table');
$this->db->flush_cache();
}
you use to limit. $this->db->limit($limit, $start);