LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 970|回复: 5

PHP+MySQL的分页显示小结

[复制链接]
发表于 2005-3-25 20:13:35 | 显示全部楼层 |阅读模式
最近在重写部份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
发表于 2005-3-30 21:09:21 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2005-4-15 09:28:37 | 显示全部楼层
用偏移量呢?
回复 支持 反对

使用道具 举报

发表于 2005-4-23 21:33:47 | 显示全部楼层
Post by phphp
用偏移量呢?


怎么用,说详细点拉
回复 支持 反对

使用道具 举报

发表于 2005-4-25 19:41:00 | 显示全部楼层
我想补充一点,在进行分页处理时最好采用SESSION传递当前页$page变量,这样服务器端就可以知道你上次取数的位置。另外的一种实现方式是将服务器端的数据以大于当前页面的10-20倍取回进行页面缓冲,用JAVASCRIPT进行页面处理,下一次再取回前页面的10-20倍的数据,这样可以有效降低服务器的压力。第三种办法就是直接使用ADODB的tohtml.inc.php类库,可以直接生成分页的html.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-6 21:41:46 | 显示全部楼层
cg111 兄弟的方法很有道理,我的方法其实只是一个模型。显示中许多数据是要先缓冲的,提高运行效率,个人觉得能放到内存处理的东西就不要放在disk
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表