国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

php+mysql分頁處理的探討

2024-07-24 12:56:32
字體:
供稿:網(wǎng)友
php+mysql分頁處理的探討
常見的分頁處理流程為:
1、用select count(*) from tbl_name取得待分頁的總記錄數(shù)
2、根據(jù)每頁的記錄數(shù)計算出總頁數(shù):總頁數(shù) = ceil(總記錄數(shù)/每頁記錄數(shù))
3、根據(jù)當(dāng)前頁號計算出起始位置:起始位置 = (當(dāng)前頁號-1)*每頁記錄數(shù)
4、用select * from tbl_name limit 起始位置,每頁記錄數(shù) 取得待顯示記錄
5、列表輸出相關(guān)信息

在這個流程中,數(shù)據(jù)庫需要兩次遍歷表才能得到所需數(shù)據(jù)。盡管limit會在得到指定記錄數(shù)后會終止遍歷,但前面直到“起始位置”的檢索是浪費掉的。

這里提出一種新算法與大家討論:
1、利用mysql的用戶變量,分割并提取每頁起始的id號。
2、查詢結(jié)果的記錄數(shù)即為總頁數(shù)
3、根據(jù)當(dāng)前頁號取得當(dāng)前頁的起始id
4、用select * from tbl_name where id>=起始id limit 每頁記錄數(shù) 取得待顯示記錄
5、列表輸出相關(guān)信息

可以看到,在后一次查詢中。由于利用了id作為主鍵的特征,數(shù)據(jù)庫可直接定位到所需記錄。從而減少了查詢時間。
這個查詢算法有一個副產(chǎn)品:可以產(chǎn)生一條用于銜接上下頁的重復(fù)記錄,也就是各頁間有一條重疊的記錄。當(dāng)然,去掉他也是很容易的。
以下是測試代碼:
<?php
include "mysql_result_all.inc"; // 用于顯示查詢結(jié)果的工作函數(shù)

$pagesize = 9; // 每頁行數(shù)
$type = 1; // =1降序排列
$mode = 0; // =1不重復(fù)上頁最后一條記錄

$conn = mysql_connect(); // 連接mysql
mysql_select_db("site"); // 選擇數(shù)據(jù)庫

// 準(zhǔn)備動態(tài)修改查詢串
if($type) {
$order = "desc";
$expr = "<=";
}else {
$order = "";
$expr = ">=";
}
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); // 取得總頁數(shù)
if($mode) $pagesize--;

// 測試分頁結(jié)果,$i表示顯示頁
for($i=0;$i<$pages;$i++) {
mysql_data_seek($rs,$i); // 移動結(jié)果集指針
list($xh,$id) = mysql_fetch_row($rs); // 取得起始id
echo "<br>[$i] $xh -- $id";
$rs1 = mysql_query("select * from data where id$expr$id order by id $order limit $pagesize");
mysql_result_all($rs1); // 顯示相關(guān)結(jié)果
}
?>

mysql_result_all.inc
這個函數(shù)我貼過多次了,對調(diào)試程序非常有用的。
<?
function mysql_result_all($result,$format="") {
echo "<table $format><tr>";
for($i=0;$i<mysql_num_fields($result);$i++) {
echo "<th>".mysql_field_name($result,$i)."</th>";
}
echo "</tr>";
while($row = mysql_fetch_row($result)) {
echo "</tr>";
for($i=0;$i<mysql_num_fields($result);$i++) {
echo "<td>".$row[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
}
?>



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉化市| 白城市| 凤山县| 泰顺县| 手游| 且末县| 洞口县| 睢宁县| 厦门市| 秭归县| 玉林市| 报价| 阿鲁科尔沁旗| 福海县| 民和| 布尔津县| 修文县| 株洲县| 蚌埠市| 临猗县| 秦皇岛市| 康平县| 塔城市| 遂宁市| 柘荣县| 保靖县| 比如县| 和静县| 阿拉尔市| 琼中| 临泽县| 甘谷县| 株洲市| 友谊县| 府谷县| 华蓥市| 类乌齐县| 安龙县| 宁明县| 陇川县| 化州市|