复杂检索数据并分页显示的处理方法
--------------------------------------------------------------------------------
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>";
?>
--------------------------------------------------------------------------------
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>";
?>
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";
}
};
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> </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> </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>";}