分页功能的实现基本上是每个web应用不可避免的。以前自己很蠢,会把所有数据一次性从数据库取出来,然后再分成一个二维数组,转json格式传给前端,然后前端再通过点击不同的页数显示不同页面,结果慢的要死。现在不会了,按正常的套路来应该是前端先获取总数(总页数)以及首页的数据并显示,然后再通过点击不同的页码再请求返回相应段的数据,后台这边的操作就是接收到不同的页码去查询数据库返回相应的数据。

分页查询肯定要用到limit,CI中的自带的拼凑查询语句写分页查询是这样的($page表示每页显示数量,$start表示页码,从0开始):
$this->db->select('col')->limit($page, $start * $page)->get('table')->result_array();

而我刚开始以为和sql语句里的limit一样,limit(a)表示返回前a条数据,limit(a,)表示从第a条开始的后面所有数据,limit(a,b)表示返回从a开始的b条数据。结果CI拼凑语句不是这样的,limit前一个参数表示偏移量,后一个表示起始位置,但只有一个参数的时和sql中一样。

我之前没有看文档,以为CI中和sql一样,直接潇洒的写完语句,结果,懵逼了,直接返回了所有数据,点哪一页都一样是所有数据。所以记录一下sql语句和框架中拼凑是有些不一样的,刚好相反。