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

时间:2013-12-12 06:14:28

标签: 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')
              ->get('my_table');

我需要运行此查询,有或没有获取值总数的限制,并获得带限制的分页输出。现在我需要再次复制查询并使用限制运行它。有没有其他方法可以将完整的查询对象复制到另一个变量并再次调用get?

4 个答案:

答案 0 :(得分:1)

您可以使用SQL_CALC_FOUND_ROWS选择i限制查询的一种方法,您还需要运行FOUND_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;

FOUND_ROWS()

答案 1 :(得分:1)

您正在寻找有效的记录缓存 http://ellislab.com/codeigniter/user-guide/database/active_record.html#caching

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();
}

答案 2 :(得分:0)

试试这样 在您的控制器中

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();

}

答案 3 :(得分:0)

you use to limit.
$this->db->limit($limit, $start);