程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php+mysql分頁處理的探討

php+mysql分頁處理的探討

編輯:關於PHP編程

php+mysql分頁處理的探討 常見的分頁處理流程為: 1、用select count(*) from tbl_name取得待分頁的總記錄數 2、根據每頁的記錄數計算出總頁數:總頁數 = ceil(總記錄數/每頁記錄數) 3、根據當前頁號計算出起始位置:起始位置 = (當前頁號-1)*每頁記錄數 4、用select * from tbl_name limit 起始位置,每頁記錄數 取得待顯示記錄 5、列表輸出相關信息 在這個流程中,數據庫需要兩次遍歷表才能得到所需數據。盡管limit會在得到指定記錄數後會終止遍歷,但前面直到“起始位置”的檢索是浪費掉的。 這裡提出一種新算法與大家討論: 1、利用mysql的用戶變量,分割並提取每頁起始的id號。 2、查詢結果的記錄數即為總頁數 3、根據當前頁號取得當前頁的起始id 4、用select * from tbl_name where id>=起始id limit 每頁記錄數 取得待顯示記錄 5、列表輸出相關信息 可以看到,在後一次查詢中。由於利用了id作為主鍵的特征,數據庫可直接定位到所需記錄。從而減少了查詢時間。 這個查詢算法有一個副產品:可以產生一條用於銜接上下頁的重復記錄,也就是各頁間有一條重疊的記錄。當然,去掉他也是很容易的。 以下是測試代碼: ="; } if($mode) $pagesize++; mysql_query("set @v:=-1"); // 定義mysql用戶變量 $rs = mysql_query("select @v:=(@v+1) as xh, id from data HAVING mod(xh,$pagesize)=0 order by id $order"); mysql_result_all($rs); // 檢查各頁分布 echo $pages = mysql_num_rows($rs); // 取得總頁數 if($mode) $pagesize--; // 測試分頁結果,$i表示顯示頁 for($i=0;$i<$pages;$i++) { mysql_data_seek($rs,$i); // 移動結果集指針 list($xh,$id) = mysql_fetch_row($rs); // 取得起始id echo "
[$i] $xh -- $id"; $rs1 = mysql_query("select * from data where id$expr$id order by id $order limit $pagesize"); mysql_result_all($rs1); // 顯示相關結果 } ?> mysql_result_all.inc 這個函數我貼過多次了,對調試程序非常有用的。 ".mysql_field_name($result,$i).""; } echo ""; while($row = mysql_fetch_row($result)) { echo ""; for($i=0;$i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved