我的分页方法分享

王志勇 发表于 2009年02月25日 19:52

分页是程序永恒的主题,2002年的时候我曾经见过一个留言板的分页程序,但是很难读懂。于是我大约在2005年的时候做了一个很大的改进,推算了另一种简单易读的方法,目前我所有的分页程序都是用此方法,这个算法从来没有出过错,无论是ASP、ASP.net、PHP、JSP,还是CGI,都是可以通用的。例如博客或者论坛程序中,以PHP为例,用此程序可以计算出总页数$p、当前页的起始位置$w1的值和结束位置$w2的值,程序如下:

<?$pa=$_GET["page"]; //或者省略查询ID名$pa=$_SERVER['QUERY_STRING'];
if ($pa) $pa=1;
$w3=10;
$w4=$auf/$w3;
$w5=floor($w4);
$p=$w5+1;
if ($w5==$w4) $p=$w5;
if (!$p) $p=1;
$w1=($pa-1)*$w3+1;
$w2=$w3+$w1-1;
if ($w2>$auf) $w2=$auf;?>

说明:

  1. 变量$pa代表当前位于第几页,如果网址中省略页数,则$pa=1;
  2. 变量$w3表示每页显示多少篇博客;
  3. 变量$auf表示博客的文章总数;
  4. 变量$p表示总页数;
  5. 变量$w1表示当前页的博客文章编号从$w1的值开始,$w2表示结束的文章编号;

分页时,读取多篇博客文章的方法:

for ($i=w1; $i<=w2; $i++){}

这是比较简单易读的算法。在搜索程序中,或者打开多段数据库的时候,分页程序就会复杂很多,我曾经连续做了好几天的演算。

8条评论:
1   双喜哥 2009-02-25 22:52
,分页确实是程序永恒的主题,学习了。
2   Goberl 2009-02-28 09:36
这个思路很清晰的!这样子只适合ID为连续的啊?
我一直是用SQL语句实现的分页,觉得效率好点。分页有点恼火哦,总是为了显示几个页码链接写很长的代码才能实现。
select top 页大小 *
from table1
where id>
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T
)
order by id
不过这个语句要是里面涉及到的表连接比较多就有点难写了,有时候调试这个SQL语句都得分析好半天。
http://www.cnblogs.com/yzwdli/archive/2007/12/06/984743.html
3   自由勇 2009-02-28 09:53
Thanks,正文的方法对不连续的ID同样适用,比如另外列一个ID列表。
4   Goberl 2009-02-28 14:25
"另外列一个ID列表" 什么意思啊?是在数据库表中重新建立一列吗?
5   自由勇 2009-02-28 16:35
我编的程序里,有时候需要,有时候不需要。
6   有德 2009-03-01 23:41
太好了我又学了。不过对于编程来说我看,我还太早了
7   自由勇 2009-05-02 10:16
Trackback来自 《记笔记是编程的好习惯

在打开多段数据的时候,对于分页的处理会复杂很多。通常情况下,只打开一段数据库,分页程序比较容易实现,如这里。

8   自由勇 2010-04-05 18:20
Trackback来自 《日记:2010-04-05》

这个分页程序可以简化为:
<?//$pa为页数
$w3=10;
$p=ceil($auf/$w3);
if (!$p) $p=1;
$w1=($pa-1)*$w3+1;
$w2=$pa*$w3;
if ($w2>$auf) $w2=$auf;?>

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写