limit 与 page
limit
limit
方法主要用于指定查询和操作的数量。可以兼容所有的数据库驱动类。
1、限制结果数量
例如获取满足要求的10个用户,如下调用即可:
Db::name('Admin')->where('status',1)->field('id,name')->limit(10)->select();
limit
方法也可以用于写操作,例如更新满足要求的3条数据:
Db::name('Admin')->where('score',100)->limit(3)->update(['level'=>'A']);
如果用于insertAll
方法的话,则可以分批多次写入,每次最多写入limit
方法指定的数量。
Db::name('Admin')->limit(100)->insertAll($userList);
2、分页查询
用于文章分页查询是limit
方法比较常用的场合,例如:
Db::name('Admin')->limit(10,25)->select();
表示查询文章数据,从第10行开始的25条数据(可能还取决于where条件和order排序的影响)。对于大数据表,尽量使用limit
限制查询结果,否则会导致很大的内存开销和性能问题。
page
page
方法主要用于分页查询。
在前面已经了解了关于limit
方法用于分页查询的情况,而page
方法则是更人性化的进行分页查询的方法,例如还是以文章列表分页为例来说,如果使用limit
方法,我们要查询第一页和第二页(假设我们每页输出10条数据)写法如下:
// 查询第一页数据
Db::name('Admin')->limit(0,10)->select();
// 查询第二页数据
Db::name('Admin')->limit(10,10)->select();
虽然利用扩展类库中的分页类Page可以自动计算出每个分页的limit参数,但是如果要自己写就比较费力了,如果用page
方法来写则简单多了,例如:
// 查询第一页数据
Db::name('Admin')->page(1,10)->select();
// 查询第二页数据
Db::name('Admin')->page(2,10)->select();
显而易见的是,使用page
方法你不需要计算每个分页数据的起始位置,page方法内部会自动计算。page
方法还可以和limit
方法配合使用,例如:
Db::name('Admin')->limit(25)->page(3)->select();
当page
方法只有一个值传入的时候,表示第几页,而limit方法则用于设置每页显示的数量,也就是说上面的写法等同于:
Db::name('Admin')->page(3,25)->select();