为查询结果建立向后/向前按钮

最近在Support Forums上有很多问题都是关于如何为一个搜索结果制作象"向后 1 2 3 4 5 向前"样子 的链接。我希望下面的脚本可以帮助你,在你的搜索结果页面中加入这种功能。这个例子是专为MySQL所写 的,但是对于其它的SQL引擎也可以很容易地适应。

因为每种应用都是不同的,这样我使用了一些通用的语句进行MySQL查询处理。TABLE名应该替换成你的 实际表名。YOUR CONDITIONAL HERE应该替换成你的where 条件,并且WHATEVER应该替换成你希望对结果进 行排序的字段(如果你的应用需要降序排列,不要忘记加上DESC)。

 1   
 2  
 3$limit=20; // 返回的行   
 4$numresults=mysql_query("select * from TABLE where YOUR CONDITIONAL HERE order by WHATEVER");   
 5$numrows=mysql_num_rows($numresults);   
 6  
 7// 接着判断是否offset已经传给脚本了,如果没有设为0   
 8if (empty($offset)) {   
 9$offset=0;   
10}   
11  
12// 取结果   
13$result=mysql_query("select id,name,phone ".   
14"from TABLE where YOUR CONDITIONAL HERE ".   
15"order by WHATEVER limit $offset,$limit");   
16  
17// 现在可以显示返回结果了   
18while ($data=mysql_fetch_array($result)) {   
19// 在此处包含如你所愿的显示结果代码   
20}   
21  
22// 接着我们需要生成其它结果的链接   
23  
24if ($offset==1) { // 如果offset为0,则忽略PREV链接   
25$prevoffset=$offset-20;   
26print "

<a href="$PHP_SELF?offset=$prevoffset">PREV</a>

 1n";   
 2}   
 3  
 4// 计算需要链接的页面数   
 5$pages=intval($numrows/$limit);   
 6  
 7// 如果除后没有余数,$pages 现在包含需要页面的整数值   
 8if ($numrows%$limit) {   
 9// 如果有余数那么增加一页   
10$pages++;   
11}   
12  
13for ($i=1;$i<=$pages;$i++) { // 循环   
14$newoffset=$limit*($i-1);   
15print "

<a href="$PHP_SELF?offset=$newoffset">$i</a>

1n";   
2}   
3  
4// 检查是否为最后一页   
5if (!(($offset/$limit)==$pages) && $pages!=1) {   
6// 如果不是下一页,则给出向后链接   
7$newoffset=$offset+$limit;   
8print "

<a href="$PHP_SELF?offset=$newoffset">NEXT</a>

<p>n";
}

1  
2这些对你来说可能有些用。当然,你可能想要使HTML的输出更干净一些...   
3  
4而且,请注意在$PHP_SELF后的链接只包含了$offset。如果你需要为查询的where条件传递参数的话, 你也需也需要把这些补在上面。</p>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus