分页相对简单,我会尽量用最简单的方式来描述它。
从这里开始,您会在大多数分页场景中遇到 5 个术语或短语(或参数):
- 限制(或每页结果)
- 偏移量(从哪里开始一组结果/记录)
- 当前页面
- 总结果
- 页数
以下面的示例查询为例:
SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
在上面的 SQL 中(它应该适用于 mysqli):
- 25 => 是限制(或每页的结果)
- 0 => 是偏移量(即从结果或记录0开始)
这转化为,
give me the results 0 - 24, i.e. the first 25 results
因此,假设您有一个包含 1000 条记录的产品表,并且您需要在每页仅显示 25 条记录的网页上显示这些:在您的第一页上,这些将是上述 5 个术语的值:
- 限制(每页结果)=> 25
- 偏移量 => 0
- 当前页面 => 1
- 总结果 => 1000
- 页数 => 总结果 / 限制 => 40
通常偏移量是根据当前页面和限制动态计算的,因此对于产品结果的第 1 页,偏移量将等于:
offset = (current page * limit) - limit
i.e. (1 * 25) - 25 = 0
所以你的 mysqli 查询将是:
SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]
i.e. SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
对产品结果的第 2 页使用相同的原则,偏移量(或起始结果)将是:
offset = (current page * limit) - limit
i.e. (2 * 25) - 25 = 25
所以你的 mysqli 查询将是:
SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]
i.e. SELECT * FROM products WHERE active = 1 LIMIT 25 , 25
这转化为,
give me the results 25 - 49, i.e. the next 25 results starting from record 25
其他术语将具有以下值:
- 限制(或每页结果)=> 25
- 当前页面 => 2
- 总结果 => 1000
- 页数 => 40
在最简单的分页用例中,唯一改变的参数是偏移量和当前页面。如果您在查询中引入过滤器,那么除了前两个之外,总结果和页数也会发生变化。
希望以上的解释能够帮助你对分页有一个基本的了解。