这些代码是用于MYSQL的,但很容易移植到其它SQL上。 由于每个程序的特殊性,所以我在MYSQL的查询里使用了一些很通用的语句。用你的表名替换TABLE;用你的条件语句代替YOUR_CONDITION_HERE;用你希望按其排序的字段名代替WHATEVER(当然如果要排倒序,别忘了加上DESC子句)。 <?php $qh=mysql_query("SELECT COUNT(*) AS rcnt FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY WHATEVER"); $data=mysql_fetch_array($qh); $nr=$data["rcnt"]; //判断偏移量参数是否传递给了脚本,如果没有就使用默认值0 if (empty($offset)) { $offset=0; } //查询结果(这里是每页20条,但你自己完全可以改变它) $result=mysql_query("SELECT id,name,phone FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY WHATEVER LIMIT $offset, 20"); //显示返回的20条记录 while ($data=mysql_fetch_array($result)) { //换成你用于显示返回记录的代码 } //下一步,要写出到其它页面的链接 if(!$offset) //如果偏移量是0,不显示前一页的链接 { $preoffset=$offset-20; print "<a href="$PHP_SELF?offset=$preoffset">前一页</a>&nbsp;n"; } //计算总共需要的页数 $pages=ceil($nr/20); //$pages变量现在包含所需的页数 for ($i=1; $i <= $pages; $i++) { $newoffset=20*$i; print "<a href="$PHP_SELF?offset=$newoffset">$i</a>&nbsp;n"; } //检查是否是最后一页 if ($pages!=0 && ($newoffset/20)!=$pages) { print "<a href="$PHP_SELF?offset=$newoffset">下一页</a>&nbsp;n"; } ?> 这只是向你大概地介绍了实现将查询结果分页显示的方法,其他的功能你自己完成。 注意两点:$PHP_SELF只有偏移量一个参数,你可以根据需要加入自己的东西;这种办法对包含百万条记录以上的表的查询效率不高。

解决方案 »

  1.   

    我也正在研究,想在PHP中找一个象ASP中的PAGESIZE,CURRENTPAGE等的变量,但是没找到,就想起了,MYSQL的的LIMIT M,N了,多谢上面的老兄的!
      

  2.   

    看看俺做的论坛,效果如何?http://www.twotown.net/emvi/main.php?bbs=1
      

  3.   

    现在已经搞定了!多谢了各位!
    在SQLSERVER里我觉得可以按ID行排序,把每页的最后一个的ID做为参数在PAGE之间传递,用TOP N 来控制取出的行数,!
      

  4.   

    向水中鱼请教
    有几个地方不太明白,希望您能指点一下。我在有问题的地方打的问号
    <?php $qh=mysql_query("SELECT COUNT(*) AS rcnt FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY WHATEVER"); $data=mysql_fetch_array($qh); $nr=$data["rcnt"]; //????? 您这句是什么意思???  //      //判断偏移量参数是否传递给了脚本,如果没有就使用默认值0 if (empty($offset)) { $offset=0; } //查询结果(这里是每页20条,但你自己完全可以改变它) $result=mysql_query("SELECT id,name,phone FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY WHATEVER LIMIT $offset, 20"); //显示返回的20条记录 while ($data=mysql_fetch_array($result)) { //换成你用于显示返回记录的代码 } //下一步,要写出到其它页面的链接 if(!$offset) //如果偏移量是0,不显示前一页的链接 { $preoffset=$offset-20; print "<a href="$PHP_SELF?offset=$preoffset">前一页</a>&nbsp;n"; } //计算总共需要的页数 $pages=ceil($nr/20); //$pages变量现在包含所需的页数 for ($i=1; $i <= $pages; $i++) { $newoffset=20*$i; print "<a href="$PHP_SELF?offset=$newoffset">$i</a>&nbsp;n"; } //检查是否是最后一页 if ($pages!=0 && ($newoffset/20)!=$pages) { print "<a href="$PHP_SELF?offset=$newoffset">下一页</a>&nbsp;n"; } ?> 
    而且$newoffset=20*$i; 这一句是不是可以放在  for  循环外边呢 
    再一个就是,如果你做出上一页,下一页 ,最后一 页的话,在用dreammaver做页面的时候是不是会出文字重叠的问题呀。我以前做的时候就遇到过这个问题。请您多指教。|
       
      

  5.   

    万一数据库不支持,你可以用php写程序“硬”翻呀。
      

  6.   

    我给你一个函数!你自己去看吧
    调用它时,只要该页面先统计它的总数,开始数和每页需要显示的个数如$lines=20;
    $all_num=你取得的全部总数
    if($lines*$p <= $all_num){
    $start=$lines*$p;
    }else $start=0;
    在取得数据的select语句里加上限制limit $start,$lines
    在适当的位置调用page_nav($all_num,$p,"abc.php?x=$x","个"); 
    function page_nav($all_num,$p,$url,$unit){
    global $lines;
    if($all_num>$lines) $page[end]=ceil($all_num/$lines)-1;
    $page[nex]=$p+1;
    $page[pre]=$p-1;
    print "<table border=0 align=center width=90% class=music><tr><td align=right><font color=#ffffff>\n";
    $page[now]=$p+1;
    print "共有<b>".$all_num."</b>$unit,每页显示<b>".$lines."</b>$unit<span></span>,当前是第<b>".$page[now]."</b>页。"; if($p>0) print "<a href=$url class=page>首页</a>  ";
    else print "首页 "; if($p>0) print "<a href=$url&p=$page[pre] class=page>上页</a> ";
    else print "上页 "; if($p<$page[end]) print "<a href=$url&p=$page[nex] class=page>下页</a> ";
    else print "下页 "; if($p==$page[end]) print "末页";
    else print "<a href=$url&p=$page[end] class=page>末页</a>\n";
    print "</font></td></tr></table>\n";
    }好的话,给我几分哦!呵呵...