|
最近在重写部份My Diary的代码,打算加入一些新的功能,包括查询时的分页显示.分页显示在许多信息系统里都是十分常用的,在PHP和MySQL的环境下很容易就能实现,最主要的是MySQL的SQL语句支持limit子句.
分页显示道理十分简单,无非就是第一页显示前n条,第二页显示后n条,依此类推.在这里可以设n为一个变量$pagesize,表示每页显示的条目数.而在MySQL的SQL语句里可以用:
select [columns] from [table] [...] limit [start item],[size];
来获得从第[start item]开始的[size]条结果.在这里,[start item]是从0开始标记的.这样,显示前n条记录就可以表示为:
select [columns] from [table] [...] limit 0,n;
显示接下来n条记录就可以用:
select [columns] from [table] [...] limit 0+n,n;
依此类推,我们可以发现,其实这个SQL遵循一个道理,就是:
select [columns] from [table] [...] limit ($page-1)*$pagesize,$pagesize;
这里变量$page表示当前页数.
由于$pagesize是先前设定的,所以要做的就是把$page的值传递给SQL语句,然后做相应查询就可以了.主要任务就是获得$page.由于$pagesize已知,所以我们可以通过mysql_num_rows()函数获取结果集的全部行数,在除以$ pagesize,得到全部页数$pagecount.如果有余数,则$pagecount为该结果取整+1,而当mysql_num_rows()的返回值小于$pagesize时,页数自然就是1了.
这样,在得到$pagecount后,我们可以用一个链接或者表单,把你要访问的页数传递给当前的PHP脚本,这样就能很方便实现分页显示了.
总的来说,整个过程分以下几步:
1.获取结果集总行数
2.确定总的页数
3.设置链接或者传递$page值表单的各式
4.显示结果
全文和代码详见:
http://yangchengkai.blogchina.com/blog/article_46585.1201500.html |
|