作為一個Web程序,經常要和不計其數的數據打交道,比如會員的數據,文章數據,假如只有幾十個會員那很好辦,在一頁顯示就可以了,可是假如你的網站是幾千甚至幾十萬會員的話,如果都在一頁打開的話無論對瀏覽器還是觀看者都是一種折磨,而且如果數據上億,從數據庫裡查詢一次的話,對服務器的壓力是很大的,這不是正確的方法。
相信每個學習PHP的新手都會對分頁這個東西感覺很頭疼,不過有了默默的這一水帖,你肯定會拍拍腦袋說,嘿,原來分頁竟然如此簡單?的確,現在請深呼吸一口新鮮的空氣,仔細的聽默默給你一點一點的分解。
假設我們要處理1000條數據,要在每頁中顯示10條,這樣的話就會分100頁來顯示,咱們先看一看在mysql裡提取10條信息是如何操作的。
Select * from table limit 0,10
上面是一句很簡單的mysql查詢語句,它的作用是從一個名叫table的表裡提取10條數據,並且把所有字段的值都獲得。其中的limit 0,10的用法是:limit 開始點,要提取的數目
關鍵的地方就在這段“limit 0,10”,它其中的0是以0為起始點,後面的10則是顯示10條數據,那麼我們要以10為起始點,顯示到第20條數據該怎麼寫呢?
可能很多大會心直口快的說「limit 10,20」嘛!啊哦,這樣可就錯誤了哦,正確的寫法是“limit 10,10”它後面的參數並非是結束點而是要提取的數目 ,記住哦。
懂得如何提取10條數據,那麼提取1000條也就是做100次這種查詢呀,就是說要做如下的查詢:
Limit 0,10 //第一頁
Limit 10,10 //第二頁
Limit 20,10 //第三頁
Limit 30,10 //第四頁
…
看出有什麼規律了嗎?沒錯,第一個參數每翻一頁就增加10,可是第二個參數是不變的。
也就是說咱們設法根據頁數來改變第一個參數的值 ,就可以進行分頁顯示數據了,怎麼樣,原理是不是很簡單?
可是要怎麼設法根據頁數來改變第一個參數的值呢?首先,咱們要有一個頁數的值,用url的GET方式取得。
例如index.php?page=18
相信大部分的大大對這個東西不陌生吧,這種url位址可是隨處可見,其中的page參數的作用就是傳入要顯示的頁數。
咱們透過一段程式碼來看看究竟是如何實現的吧:
[php]
/*
Author:默默
Date :2006-12-03$ page=isset($_GET['page'])?intval($_GET['page']):1; //這句就是取得page=18中的page的值,假如不存在page,那麼頁數就是1。
$select=mysql_select_db("db",$ db); //選擇要操作的資料庫
首先咱們要取得資料庫中到底有多少數據,才能判斷具體要分多少頁,總頁數具體的公式就是
總數據數除以每頁顯示的條數,有餘進一。
*/
$total=mysql_num_rows(mysql_query("select * from table")); //查詢資料的總數total
$pagenum=ceil($total/$num); //取得總頁數pagenum
//假如傳入的頁數參數apge 大於總頁數pagenum,則顯示錯誤訊息
If($page>$pagenum || $page == 0){
Exit;
}
$offset=($page-1)*$num; //取得limit的第一個參數的值offset ,假如第一頁則為(1-1)*10=0,第二頁為(2-1)*10=10。 (傳入的頁數-1) * 每頁的資料得到limit第一個參數的值
While($it=mysql_fetch_array($info)){
Echo $it['name']."";
} //顯示資料
For($i=1;$ i
Echo $show." ";
}
/*顯示分頁訊息,假如是當頁則顯示粗體的數字,其餘的頁數則為超連接,假如目前為第三頁則顯示如下
1 2 3 4 5 6
?>
[/php]
假如你仔細的讀過上面的程式碼,把資料庫連接和查詢的表替換成你的,那麼就能看見它的執行效果哦。
是不是很簡單,只要動動腦筋,可以讓它顯示的更為個性化哦,給大家出一個小題,如何實現“首頁 上一頁 下一頁 尾頁”這種格式的分頁呢?
OK,水帖灌完,收工。 ^_^ 默默小談PHP&MYSQL分頁原理與實現
================== ==
總結:
原型: Select * from table limit 0,10
程式: select * from table limit $offset,$num ($offset取值是:傳入的頁數-1 $num是每個頁面顯示的數據,多為固定常數值)
總分頁數:總資料% 每頁顯示的條數,有餘進一
int totalPage=((totalCount%NUM)==0)?totalCount/NUM:totalCount/NUM+1;
limit用法:limit 開始點,要提取的數目
不過要注意的是:一定要加上order by ,確定以上升或下降的順序來查詢,不然在查詢的時候會不知道從哪個方向開始查詢。不過一定要注意順序:正確的是select * from user order by id desc limit 0,10;
想要獲取更多的相關文章內容,請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。