看板 layzer
作者 標題 [轉寄][心得] 分享一段自己寫分頁的function
時間 2010年07月22日 Thu. PM 07:51:01
看板 PHP
作者 標題 [心得] 分享一段自己寫分頁的function
時間 Mon Apr 16 08:57:13 2007
使用方法
一、只要給這支function資料庫的總筆數(用count去算就好了)
二、原本的select查詢,最後面加上limit ".($page*$p).",".$p;
三、在表格最後面,把function這個名字貼上
array_page($totals_rows,$page,$p,$px,$new_Link);
四、$new_Link就是要該網頁,原本有些 $_GET 要回傳,就加在這裡...
例如:http://localhost/test.php?mode=old ---> 查歷史資料 $new_Link 就
給他 'mode=old'
山人覺得優點就是...
database用 limit 去限制每次查的大小,可以節省資料庫抓資料數量的負擔
用count去算database的內容也快
原本的SQL語法如...
$sql="select id,name,sex from humandata";
要改成二支
一支如第二點所說的 :
$sql="select id,name,sex from humandata limit ".($page*$p).",".$p;
另一支就是要算筆數
$sql="select count(*) from humandata";
或擔心二支SQL算出不用筆數,就偷懶這樣寫
$sql="select count(*) from (原sql語法) as a ";
接著...$totals_rows=mysql_result(mysql_query($sql),0,0);
一點點小小的心得供大家參考...也希望大家能多多指教
<?
//自動產生分頁排序說明
//版本1.1
//開發者:羽山秋人
//時間:2007414
//第二版修正於:2007416
//使用方法
/* array_page(
$totals_rows $資料庫算出的總筆數,
$page $目前的頁碼常用
$p $每頁顯示的筆數
$px $每頁要顯示多少個【第 xx 頁】
$new_Link $跳頁用的網頁帶入值 ---> ?以後原本傳的值
P.S:需自行在 SQL 語法最後加上 limit ".($page*$p).",".$p;
P.S:$p、$px、$page 請加注在 檔案開頭 以上
limit ".($page*$p).",".$p; //加在原本沒分頁的SQL語法最後(mysql only)
//要加開網頁開頭的部分-------------------start
$p=10; //每頁顯示5筆
$px=5; //每頁顯示跳頁用的5筆
if(isset($page))
{
$page=$page;
}
else if(isset($_GET['page']))
{
$page=$_GET['page'];
}
else
{
$page=0;
}
//要加在網頁開頭的部分-------------------end
*/
function array_page($totals_rows,$page,$p,$px,$new_Link)
{
//傳說中的分頁
//$p=5; // 每頁顯示5筆
//$px=5; //每頁限制最多5頁,超過就用「下5頁」上5頁
$page_range_start=floor($page/$px)*$px;
$page_range_end=$page_range_start+$px;
//自動算幾頁
$totals_page=ceil($totals_rows/$p);
if($page_range_end>$totals_page)
{
$page_range_end=$totals_page;
}
//echo $page_range_start;
//echo "<br>";
//echo $page_range_end;
//echo "<br>";
if($page-($page%$px)>=$px)
{
echo "【<a href=?".$new_Link."&page=".($page-$px).">上".$px."頁</a>】 ";
}
if(($page-$page%$px)<$totals_page-$px)
{
if(($page+$px)>=$totals_page) //修正加上page的頁碼超過最終頁碼 2007/4/16
{
$temp=$totals_page-1;
}
else
{
$temp=$page+$px;
}
echo "【<a href=?".$new_Link."&page=".($temp).">下".$px."頁</a>】";
}
echo "<br>";
for($i=$page_range_start;$i<$page_range_end;$i++)
{
if($page==$i)
echo "【第 ".($i+1)." 頁】";
else
echo "【<a href=?".$new_Link."&page=".$i.">第 ".($i+1)." 頁</a>】";
}
echo "<br><div align=right>第【".($page+1)."】頁</div>";
echo "合計共【".$totals_rows."】筆/共【".$totals_page."】頁";
//分頁結束
}
?>
--
歡樂學習農場 工作室成立
宗旨:現階段幫學生解決任何課業的疑難問題。
挑戰叫獸任何出題~不限任何語言....GoGoGo
歡樂學習農場 論壇網址:http://3wa.myvnc.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.213.47
推 :不錯唷!! 如果用class包起來 會更好 XD!!1F 04/16 09:52
推 :似乎不是所有的 DB 都支援 limit 語法喔 ^^;;2F 04/16 12:03
推 :看看adodb3F 04/16 12:20
推 :推樓上4F 04/16 15:28
→ :/_\5F 04/16 16:49
→ :剛才跟我們組長討論了一段adobc...他說效率不太好..Orz
→ :剛才跟我們組長討論了一段adobc...他說效率不太好..Orz
推 :好處在於 任何一種DB PHP 寫法都一樣7F 04/16 18:40
推 :3Q~~~8F 04/16 22:24
推 :彈性與速度常常是二選一的....9F 04/17 17:48
→ :就像二退與二一......*flee*
推 :不過個人覺得這部份速度影響不大啊..
→ :瓶頸應該是在DB那裡而不是產生SQL
→ :就像二退與二一......*flee*
推 :不過個人覺得這部份速度影響不大啊..
→ :瓶頸應該是在DB那裡而不是產生SQL
推 :還好程式碼產生器都寫好了...一行字就新改刪查Orz13F 04/18 13:02
※ 編輯: shadowjohn 來自: 220.132.135.169 (05/23 14:13)--
※ 來源: DISP BBS 看板: layzer 文章連結: http://disp.cc/b/72-cfy
※ 看板: layzer 文章推薦值: 2 目前人氣: 0 累積人氣: 288
回列表(←)
分享