給你一個用臨時表來實現多重查詢並分頁的例子<?
/*用臨時表來實現搜索並且分頁功能,這樣速度更快//
如果直接普通的方法,系統的開銷很大,一個頁面一般要執行兩次複雜查詢。如果利用臨時表把數據先保存,然后處理。這樣對數據庫多條件的複雜查詢只有一次,即創建臨時表的那一次。
用于複雜的查詢,特別是涉及到多表的分頁數據查詢。*/
?>
<?
require("../class/mysql_class.php");
require("config.php");
require("../func/getstate.php");
//獲取工作主題option
$joboption=$dbg->select("select * from job");
$N=$dbg->QCount;
$option="<option value=all>所有主題</option>";
for($i=0;$i<$N;$i++){
$option.="<option value=".$joboption[$i][jobid].">".$joboption[$i][jobname]."</option>";
}//獲取查詢語句
$Sql="create temporary table temps ";
$Sql.="select * from job_content where id like '%'";
$where="";
$where.=($fjobcate!="all"&&$fjobcate)?" and jobid='$fjobcate' ":"";
$where.=($fjobbegin)?" and left(startdate,10)='$fjobbegin' ":"";
if($fjobuser){
$userId=$dbg->select("select userid from user where realname like '%$fjobuser%'");
for($i=0;$i<count($userId);$i++){
$inuserid.=($i==count($userId)-1)?"'".$userId[$i][userid]."'":("'".$userId[$i][userid]."',");
}
$where.=" and userid in ($inuserid) ";
}
if(isset($fState)&&$fState!="all"&&$fState!=""){
$where.=" and state='$fState' ";
}if($where!="")
$Sql.=$where;
//echo $Sql;
//創建臨時表temps
mysql_query($Sql);//獲取page,totalpage,和結果集
 $r=mysql_query("select count(*) as numn from temps");;
 $Num=mysql_result($r,0,"numn");
 $PageSize = 3;
 $TotalPage = ceil ( $Num/$PageSize );
 if ($page==""||$page<=0) $page=1;
 if ($page>$TotalPage) $page=$TotalPage;
 $Begin = ( $page-1 ) * $PageSize;
 if ( $TotalPage==0 ) $TotalPage=1;
$Result = $dbg->select( "select * from temps order by startdate desc limit $Begin,$PageSize " ); //獲取頁碼顯示區變量$listPage
 if ($TotalPage>1){
$listPage="<div align=left>
<a href=temptablejob.php?page=1&fjobuser=$fjobuser&fState=$fState&fjobbegin=$fjobbegin&fjobcate=$fjobcate>第一頁</a>
<a href=temptablejob.php?page=".($page-1)."&fjobuser=$fjobuser&fState=$fState&fjobbegin=$fjobbegin&fjobcate=$fjobcate>前一頁</a>
<a href=temptablejob.php?page=".($page+1)."&fjobuser=$fjobuser&fState=$fState&fjobbegin=$fjobbegin&fjobcate=$fjobcate>后一頁</a>
<a href=temptablejob.php?page=$TotalPage&fjobuser=$fjobuser&fState=$fState&fjobbegin=$fjobbegin&fjobcate=$fjobcate>末尾頁</a>
</div>";
}
$dbg->writeflush("w");
?><a href=# onclick="window.open('job_add.php','add','menu=no,top=0,left=200,width=470,height=400')">
新增工作任務</a> 
<script language=javascript src="../js/date.js"></script>
<link href=../css/site.css rel=stylesheet>
<form name="findform" method="post" action=<?=$PHP_SELF?>>
  負&nbsp;&nbsp;責&nbsp;&nbsp;人: 
  <input type="text" name="fjobuser" > 工作主題: 
 <select name="fjobcate">
  <?=$option?>
  </select>
<br>開始日期: 
  <input type="text" name="fjobbegin" size=18><input type=button 
onClick="javascript:show_calendar('findform.fjobbegin');" 
onMouseOver="window.status='選擇日期';return true;" 
onMouseOut="window.status='';return true;" value="^" name="button">
 工作狀態:
 <select name="fState">
  <option value="all">所有狀態</option>          
  <option value="0">還未開始</option>
          <option value="1">正在進行</option>
          <option value="2">任務暫停</option>
          <option value="3">任務延遲</option>
          <option value="4">任務完成</option>
 </select>
<input type=submit  name="subsearch" value=搜索>
</form>
<?=($Num<=0)?die("<center>沒有相關分析!"):""?>
共<?=$TotalPage?>頁 現處第<?=$page?>頁<br>
<table width="600" border="1" cellspacing="0" cellpadding="0">
  <tr> 
    <td rowspan="2"> 
      <div align="center">負責人</div>
      <div align="center"></div>
    </td>
    <td rowspan="2"> 
      <div align="center">任務主題</div>
      <div align="center"></div>
    </td>
    <td rowspan="2"> 
      <div align="center">工作主題</div>
      <div align="center"></div>
    </td>
    <td rowspan="2"> 
      <div align="center">任務開始時間</div>
      <div align="center"></div>
    </td>
<td rowspan="2"> 
      <div align="center">任務狀態</div>
      <div align="center"></div>
    </td>
    <td rowspan="2" colspan="2"> 
      <div align="center">操作</div>
    </td>
  </tr>
  <tr></tr>
<?
for ($i=0;$i<count($Result);$i++){
 //獲取當行負責人姓名數組
$name=$dbg->select("select realname from user where userid='".$Result[$i][userid]."'");
//獲取當行工作主題數組
$catename=$dbg->select("select * from job where jobid='".$Result[$i][jobid]."'");
//獲取任務狀態
$state=getstate($Result[$i][state]);
//獲取表格中的一行
 ?>
 <tr><td><?=$name[0][realname]?></td>
<td><?=$Result[$i][contentname]?></td>
<td><?=$catename[0][jobname]?></td>
<td><?=substr($Result[$i][startdate],0,strlen($Result[$i][startdate])-3)?></td>
<td><?=$state?></td>
<td><a href='#' onclick="window.open('job_view.php?id=<?=$Result[$i][id]?>','察看','menu=no,top=0,left=100,width=470,height=400')">察看</a></td>
<td><a href='#' onclick="window.open('job_print.php?id=<?=$Result[$i][id]?>','察看','menubar=yes,top=0,left=100,width=470,height=400')">列印</a></td></tr>
<?
}
?>
</table>
<?=$listPage?>

解决方案 »

  1.   

    如果我用creat temporary table table_name建立一个临时表的结构,因为我会经常的增加,更新和删除其中的记录.不知道还行啊.
      

  2.   

    可关键程序一执行完这个表就没有了啊,我不想啊.
    我想重启MYSQL时才会消失怎么办呢.谢谢.
      

  3.   

    是阿,
    我也覺得很不爽,好像不能穿插幾個頁面.
    我想應該是mysql連接一斷,臨時表就消失了