background image

PHP 学习:PHP 分页原理

我们的数据库中有 100 条记录,我们希望分页显示,每页显示 10 条,那么我们应该怎么
来实现呢?
我们来看页数与记录数之间的关系:
第一页:显示 1-10 条数据,sql 语句的 limit 部分应该是 limit 0,10
第二页:显示 11-20 条数据,sql 语句的 limit 部分应该是 limit 10,10
第三页:显示 21-30 条数据,sql 语句的 limit 部分应该是 limit 20,10
以此类推。。。
我们从上面的数据发现 limit 部分,变化的始终只有第一个起始偏量,而第二个偏量是不
变的,这是因为我们每页显示的都是 10 条。
我们的第一条数据对应的 limit 起始偏量是 0,第二条对应的是 1,这是由于 mysql 语法决
定的。
现在,我们使用 PHP 语言来表述:
$page:当前的页数,默认为第一页
$page_size:每页显示多少条记录,这个是固定不变的
$offset:limit 语句的起始偏量,这个变量随着$page 的值的改变而改变,我们的 limit 语句

部分是 limit $offset,$page_size,现在$page_size 不变
,应此我们只需要找出$offset 与$page 的对应关系即可,从上面的数据我们可以分析一个
数列:
第一项【也就是第一页】的值是 0=(1-1)*10【这里,由于 limit 的第二个偏量不变,所以我们
只需要分析第一个偏量】
第二项【也就是第二页】的值是 10=(2-1)*10
第二项【也就是第三页】的值是 20=(3-1)*10
。。。以此类推,不难得出,这是一个首项为 0,公差为 10 的等差数列,它的通项公式为:
pn=(n-1)*10,这里的 pn 就是我们的$offset,对应过来
,即:$offset=($page-1)*$page_size.
那么分页的 limit 也就是 limit ($page-1)*$page_size,$page_size。
假 设 我 们 的 数 据 表 是 goods, 那 么 分 页 sql 应 该 是 select  * from  goods limit  ($page-
1)*$page_size,$page_size。
由于每一页的 page 值都不一样,所以我们每次读出的数据也是不一样的,这样就实现了,
分页的效果。