mysql_data_seek()不知道可不可以?影不影响效率呢?

解决方案 »

  1.   

    但很多时候用户是不需要看后面那几页的,没必要把那些都查出来缓存起来吧,mysql_data_seek()好像是返回true和false的~除了COUNT(*)真的没其他办法了吗?再等一天,如果没有其他好的办法就结贴,谢谢。
      

  2.   

    如果要用count(*)再次访问数据库的话还不如显示数据的时候加个变量i循环出最大数字就是数据总数
      

  3.   

    小弟写的,供参考,欢迎高手指正
    参见:www.ebysky.com 来访记录//============================
    //    FileName:   page.php
    //    Version:    0.0.2
    //    Author:     Leo
    //    Date C/M:   2007-02-01/2007-04-27
    //    Content:    配置文件
    //============================
    //包含配置文件
    require_once("config.php");
    //分页信息
    define("_P_TOPIC",25);    //每页主题数
    define("_P_NUM",10);        //分页栏的页码数
    define("_P_PRE",4);        //当前页前导//分页函数 (Ver0.0.2Build2007-04-28)
    function page($sql,$p)
    {
    //以下初始化各项参数
    $parr=array("bar"=>'',"sql"=>'');
    $alltopic=mysql_num_rows(mysql_query($sql));
    if($alltopic<=0) return $parr;            //无主题直返回
    $pagebody="";$pagego="";                //参数初始化
    $pa=ceil($alltopic/_P_TOPIC);            //求得总页数,进一取整
    if($p<=0 || $p>$pa) $p=1;                //当前页不在范围,初始化当前页
    //以下求解页码范围$pa与当前页$p
    if($pa>_P_NUM)                            //最大页数大于"页码条所列页数"
    {
        if($p>=1 && $p<=_P_PRE)                        //当前页处于前导页内
        {
         $ps=1;$pe=_P_NUM;
         }
         elseif($p>_P_PRE && $p<=$pa-_P_NUM+_P_PRE)    //当前页处于正常范围
        {
        $ps=$p-_P_PRE;$pe=$p+_P_NUM-_P_PRE-1;
        }
        else                                        //当前页处于页尾$pa>=$p>$pa-_P_NUM+_P_PRE
        {
        $ps=$pa-_P_NUM+1;$pe=$pa;
        }
      $pagego=" <input type='text' size=1 onKeyDown=\"if(event.keyCode==13) {window.location='".$_SERVER["PHP_SELF"]."?p='+this.value; return false;}\">";
     }
     else                                //最大页数小于"页码条所列页数"
     {
      $ps=1;$pe=$pa;
     }
    //以下构建页码条
     for($i=$ps;$i<=$pe;$i++)
     {
        $pagebody.=($i==$p)?" <span class='pagenow'>".$i."</span> ":" <a href='".$_SERVER["PHP_SELF"]."?p=".$i."'>".$i."</a> ";
     }
    //以下构建返回数组的值
    $parr["bar"]="\n<span id='pagebar'>[共".$pa."页/".$alltopic."条] ".($pa>_P_NUM?($p==1?'':'<a href=\''.$_SERVER['PHP_SELF'].'?p=1\' title=\'第一页\'>|&lt</a>').$pagebody.($p==$pa?'':'<a href=\''.$_SERVER['PHP_SELF'].'?p='.$pa.'\' title=\'最后一页\'>&gt;|</a>'):$pagebody).$pagego."</span>\n";
    $parr["sql"]=$sql." LIMIT ".($p-1)*_P_TOPIC.","._P_TOPIC;
    return $parr;

    ?> 
      

  4.   

    谢谢
    不过这里$alltopic=mysql_num_rows(mysql_query($sql));还是把所有数据都差出来了哦,呵呵
      

  5.   

    呵,就是我在一楼说的,你即然不想count全读,那么就用一个txt文件记录数据总数,增记录时加一,删数据时减一,用时取之,分页时就不必全读,岂不好载。因为你的思路是对的,分页时只是显示相应数码那么几条,全读数据岂不浪费,你想要的总行数,只不过分页时用一下、用来得到总页数而已。