复杂检索数据并分页显示的处理方法
--------------------------------------------------------------------------------
 www.joyphp.net  php技术网站 
  
系统标题:复杂检索数据并分页显示的处理方法 
系统功能:利用临时表检索数据库数据,然后分页显示的方法: 
处理方法:采用临时表存放数据中间结果,根据中间结果显示数据 
数据的显示采用隔行的方式处理 
处理优点:对于复杂的查询,特别是涉及到多表的数据查询,如果直接使用查询条件,系统的 
开销将很大,利用临时表把数据先保存,然后处理。这样对数据库的查询只要开销一次。 
使用方法:只要把连接数据库的用户信息和数据表改变即可使用 <? 
//连接数据库 
$dbh = mysql_connect('localhost:3306','root',''); 
mysql_select_db('test'); 
//把数据检索的结果保存到临时表中 
$ls_sql = ' create temporary table temps '; 
$ls_sql .= ' select lk_title,lk_link from lk_t_content '; 
$ls_sql .= " where lk_title like '%".$searchcontent."%' "; 
$res = mysql_query($ls_sql, $dbh); 
//得到检索数据的总数 
$ls_sql = 'select count(*) as rcnt_con from temps '; 
$res = mysql_query($ls_sql, $dbh); 
$rcon = $row["rcnt_con"]; 
$pages=ceil($rcon / 20); //$pages变量现在总的页数 
if (empty($offset)) { 
$offset=1; 
$curline = 0; 
} else 
$curline = ($offset - 1) * 20; 
//打印表头 
print '<table width="100%" border="0">'; 
print '<tr class="text"> <td width="50%"> <div align="center">'; 
if ($offset <> 1) { //如果偏移量是0,不显示前一页的链接 
$newoffset=$offset - 1; 
print "<a href='$PHP_SELF?offset=$newoffset'>前一页</a>"; 
} else { 
print "前一页"; 
print " "; 

//显示所有的页数 
for ($i=1; $i <= $pages; $i++) { 
$temps = "<a href='".$PHP_SELF.'?offset='.$i."'>".$i."</a>"; 
print $temps; 
print " "; 

//检查是否是最后一页 
if ($pages!=0 && $offset!=$pages) { 
$newoffset=$offset+1; 
print "<a href='$PHP_SELF?offset=$newoffset'>下一页</a>"; 
} else print "下一页"; 
print '</div> </td>'; 
print '<td width="50%"> <div align="center">'; 
print "当前页:".$offset." 共".$pages."页"; 
print '</div> </td>'; 
print "</table>"; 
//显示查询信息 
print '<table width="100%" border="1">'; 
print '<tr class="text"> '; 
print '<td width="100%"> <div align="center">查询结果信息</div> </td>'; 
print '</tr>'; 
$query = "select lk_title,lk_link from temps order by lk_title desc LIMIT ".$curline.",20"; 
$res = mysql_query($query, $dbh); 
$li_num = 0; 
while ($row = mysql_fetch_array($res)) { 
//采用隔行显示的方法显示信息内容 
if ($li_number == 0) { 
<tr bgcolor="#dedede"> 
$li_number = 1; 
} else { 
<tr bgcolor="#ededed"> 
$li_number = 0; 

$tempstr = "<a href='".$row[lk_link]."'>".$row['lk_title']."</a>"; 
print '<td width="100%" height="15" class="text"> '.$tempstr.'</td>'; 
print '</tr>'; 

print "</table>"; 
?> 
 

解决方案 »

  1.   

    /**一个简单的分页类(和数据库无关)**/
    class Pages
    {    
        var $total_nums;
        var $total_pagenums;
        var $pre_page;
        var $next_page;  
        var $start_num;
        var $end_num;    
        var $page_num;
    var $page_lenth;    function Pages($total_nums,$nums_per_page,$page_num)
        {
            $page_num=($page_num)? $page_num:1;
            $this->total_nums=$total_nums;        
            $this->pre_page=$page_num-1;
            $this->next_page=$page_num+1;        
            $this->total_pagenums=ceil($this->total_nums/$nums_per_page);
            $this->start_num=($page_num-1)*$nums_per_page;
            $this->end_num= ($this->total_nums>($this->start_num+$nums_per_page))? $this->start_num+$nums_per_page : $this->total_nums;    
    $this->page_num=$page_num;
    $this->page_lenth=$this->end_num-$this->start_num;echo "total_nums=$total_nums";
        }
    };
      

  2.   

    //___________提交要查询的内容_____________
    function news_search()
    {global $Table,$db_link,$Bt,$_REQUEST;
    while(list($key,$val)=each($_REQUEST))
    {
    $$key=$val;
    }$str=urlencode($keyword);
    $strj=urldecode($str);

    $pagesize=6;#_一页几条信息 $sqln="select * from $Table[index] where fenid='$fenid' && content like '%$strj%'";
    $qun=$db_link->query($sqln);
    $num=$db_link->num_rows($qun);
    $pages=intval($num/$pagesize);
    if($num%$pagesize)
    $pages++;
    if(!isset($page))
    $page=1;
    if(isset($tj))
    if($tj>$pages)
    $tj=$pages;
    else
    $page=$tj;
    $sqlt="select * from $Table[zt] where id='$fenid'";
    $resultt=$db_link->query($sqlt);
    $rowt=$db_link->fetch_array($resultt);

    echo "<TABLE cellSpacing=0 cellPadding=0 border=0>";
    echo "<TBODY>";
    echo "<TR>"; 
    echo "<TD WIDTH=25><IMG height=35 src=image/ul1.gif width=25></TD>";
    echo "<TD WIDTH=584 background=image/um1.gif>$rowt[bt]</TD>";
    echo "<TD WIDTH=25><IMG height=35 src=image/ur1.gif width=25></TD>";
    echo "</TR>";
    echo "<TR>"; 
    echo "<TD background=image/l.gif>&nbsp;</TD>";
    echo "<TD>";
    $offset=$pagesize*($page-1);
    $sql="select * from $Table[index] where fenid='$fenid' && content like '%$strj%' order by date desc limit $offset,$pagesize";$result=$db_link->query($sql);
    if(!$db_link->num_rows($sql))
    {

    echo "<br><font color=#FF0000>对不起!!!没有你所要需要</font>${strj}<font color=#FF0000>内容,请重试!</font><br><br>";

    }else{

    while($row=$db_link->fetch_array($result))
    {
    $string=$row[content];
    $num = "<font color=#FF0000>$strj</font>";
    $string = ereg_replace($strj,$num,$string);
    echo"<IMG SRC=image/news1.gif WIDTH=10 HEIGHT=8> <a href=zshang.php?func=zshang&fenid=$row[fenid]&id=$row[id]&fid=$id>$string</a><br> [$row[date]] 作者:$row[author]<hr color=#339933 size=1>";

    } //显示总页数
    echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")<br>";
    //显示分页数
    for ($i=1;$i<$page;$i++)
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$i."'>第".$i ."页</a>  ";
    echo "第".$page."页  ";
    for ($i=$page+1;$i<=$pages;$i++)
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$i."'>第".$i ."页</a>  "; echo "<br>";
    //显示转到页数
    //计算首页、上一页、下一页、尾页的页数值
    $first=1;
    $prev=$page-1;
    $next=$page+1;
    $last=$pages;
    if ($page>1)
    {
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$first."'>首页</a>  ";
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$prev."'>上一页</a>  ";
    }
    if ($page<$pages)
    {
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$next."'>下一页</a>  ";
    echo "<a href='$php_self?func=search&fenid=$fenid&id=$id&keyword=$str&page=".$last."'>尾页</a>  ";
    }
    }
    echo "</TD>";echo "<TD background=image/r.gif>&nbsp;</TD>";
    echo "</TR>";
    echo "<TR>";
    echo "<TD><IMG height=11 src=image/bl.gif width=25></TD>";
    echo "<TD BACKGROUND=image/bm.gif><IMG height=12 src=image/bm.gif width=1></TD>";
    echo "<TD><IMG height=11 src=image/br.gif width=25></TD>";
    echo "</TR>";echo "</TBODY>";
    echo "</TABLE>";}