You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter3中Limit与Offset分页失效问题求助

解决CodeIgniter3 Ajax分页每次返回全部数据的问题

你遇到的问题很典型——分页组件显示正常,但每次请求都拿到全部12条数据,核心原因是模型里的查询构造器调用顺序错了,导致分页的limit和offset根本没生效。

先看你模型里的这段代码:

public function get_collections($id = FALSE, $limit = FALSE, $offset = FALSE) {
    if ($id === FALSE) {
        $query = $this->db->get('collections'); // 这里先执行了查询!
        $this->db->order_by('id','desc');
        if($limit && $offset){
            $this->db->limit($limit,$offset);
        }elseif(!$offset && $limit){
            $this->db->limit($limit);
        }
        return $query->result_array();
    }
    // ... 其他代码
}

问题出在$this->db->get('collections')这行:你先执行了查询,之后才设置order_by和limit条件,这些条件根本没被加到查询语句里,所以每次都是返回全表数据。

修复方案:调整查询构造器的调用顺序

要先把所有查询条件(排序、分页)都设置好,最后再调用get()执行查询。修改后的模型代码如下:

public function get_collections($id = FALSE, $limit = FALSE, $offset = FALSE) {
    if ($id === FALSE) {
        $this->db->order_by('id','desc'); // 先设置排序
        
        // 再设置分页条件
        if($limit && $offset){
            $this->db->limit($limit,$offset);
        }elseif($limit){ // 简化判断,只要有limit就设置
            $this->db->limit($limit);
        }
        
        $query = $this->db->get('collections'); // 最后执行查询
        return $query->result_array();
    }
    
    $query = $this->db->get_where('collections', array('id' => $id));
    return $query->row_array();
}

额外优化建议

控制器里计算总条数的count($this->collections_model->get_collections())会查询全表数据再计数,效率较低,建议改用CodeIgniter内置的计数方法:

// 替换原来的$totalRec = count($this->collections_model->get_collections());
$totalRec = $this->db->count_all_results('collections');

这样直接执行SELECT COUNT(*) FROM collections,性能更好。

改完之后,再测试Ajax分页,应该就能每次只返回当前页的1条数据了。

内容的提问来源于stack exchange,提问作者user9659355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:44:42