-
- select * from table limit 0,10 // 前10筆記錄
- select * from table limit 10,10 // 第11至20筆記錄
- select * from table limit 20,10 // 第21至30筆記錄
- ……
-
複製程式碼
這一組語句其實就是當$pagesize=10的時候取表內每一頁資料的sql語句,我們可以總結出這樣一個模板:
select * from table limit ($currentpageid - 1) * $pagesize, $pagesize
拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那麼回事。搞定了最重要的如何取得資料的問題以後,剩下的就只是傳遞參數,建構合適的sql語句然後使用php從資料庫內取得資料並顯示了。
php分頁程式碼:
-
-
// 建立資料庫連線
- $link = mysql_connect("localhost", "mysql_user", "mysql_pass", "mysql_pass")
- or die("could not connect: " . mysql_error());
- // 取得目前頁數
- if( isset($_get['page']) ){
- $page = intval ( $_get['page'] );
- }
- else{
- $page = 1;
- }
- // 每頁數
- $pagesize = 10;
- // 取得總資料量
- $sql = "select count(*) as amount from table";
- $result = mysql_query($sql);
- $row = mysql_fetch_row($result);
- $amount = $row['amount'];
- // 記算總共有多少頁
- if( $amount ){
- if( $amount if( $amount % $page_size ){ //取總資料量除以每頁數的餘數
- $page_count = (int)($ amount / $page_size) 1; //如果有餘數,則頁數等於總資料量除以每頁數的結果取整再加一
- }else{
- $page_count = $amount / $page_size; //如果沒有餘數,則頁數等於總資料量除以每頁數的結果
- }
- }
- else{
- $page_count = 0;
- }
-
- // 翻頁連結
- $page_string = '';
- if( $page == 1 ){
- $page_string .= '第一頁|上一頁|';
- }
- else{
- $page_string .= '|上一頁|';
- }
- if( ($page == $page_count) || ($page_count == 0) ){
- $page_string .= '下一頁|尾頁';
- }
- else{
- $page_string .= '下一頁 a>|尾頁';
- }
- // 取得數據,以二維數組格式傳回結果
- if( $amount ){
- $sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
- $result = mysql_query($mysql );
-
- while ( $row = mysql_fetch_row($result) ){
- $rowset[] = $row;
- }
- }else{
- $rowset = array() ;
- }
- // 沒有包含顯示結果的程式碼,那不在討論範圍,只要用foreach就可以很簡單的用得到的二維數組來顯示結果
- ?>
-
複製程式碼
oo風格程式碼,以下程式碼中的資料庫連線是使用的pear db類別進行處理
if ( in_array($key, $allow_options) && ($value != null) ) { $this->$key = $value; } } return true ; } } ?> 複製程式碼分頁程式碼呼叫:
-
-
// filename: test_pager.php
- // 這是一段簡單的範例程式碼,前邊省略了使用pear db類別建立資料庫連線的程式碼
- require "pager.class.php";
- if ( isset($_get['page']) )
- {
- $page = (int)$_get[ 'page'];
- }
- else
- {
- $page = 1;
- }
- $sql = "select * from table order by id";
- $pager_option = array(
- "sql" => $sql,
- "pagesize" => 10,
- "currentpageid" => $page
- );
- if ( isset($_get[' numitems']) )
- {
- $pager_option['numitems'] = (int)$_get['numitems'];
- }
- $pager = @new pager($pager_option); $data = $pager->getpagedata();
- if ( $pager->isfirstpage )
- {
- $turnover = "首頁|上一頁|";
- }
- else
- {
- $turnover = "首頁|previouspageid."&numitems=".$pager->numitems."'>上一頁|";
- }
- if ( $pager->islastpage )
- {
- $turnover .= "下一頁|尾頁";
- }
- else
- {
- $turnover .= " nextpageid."&numitems=".$pager->numitems."'>下一頁|numpages."&numitems=".$pager-> numitems."'>尾頁";
- }
- ?>
複製程式碼
說明:
這個類別只是處理數據,並不負責處理顯示,因為將數據的處理和結果的顯示都放到一個類別裡邊實在是有些勉強。
顯示時情況和要求多變,不如自己根據類別給出的結果處理,更好的方法是根據這個pager類別繼承一個自己的子類別來顯示不同的分頁,例如顯示使用者分頁列表可以:
-
-
class memberpager extends pager
- {
- function showmemberlist()
- { 🎜>
-
- $data = $this->getpagedata();
- // 顯示結果的程式碼
- // ......
- }
- }
- // / 呼叫
- if ( isset($_get['page']) )
- {
- $page = (int)$_get['page'];
- }
- else
- {
- $page = 1;
- }
- $sql = "select * from members order by id";
- $pager_option = array(
- "sql" => $sql,
- "pagesize" => 10,
- "currentpageid" => $page
- );
- if ( isset($_get['numitems']) )
- {
- $pager_option[' numitems'] = (int)$_get['numitems'];
- }
- $pager = @new memberpager($pager_option);
- $pager->showmemberlist();
- ?>
-
複製程式碼
第二,不同資料庫的相容性,在不同的資料庫裡截獲一段結果的寫法是不一樣的。
-
$pagenum=@ceil($num/$pagesize);
- if($num > $pagesize){
- if($pageval if($pageval==$pagenum){
- echo "首頁 上一頁 下一頁 末頁";
- //echo "第".$pageval."頁/共".$pagenum."頁";
- echo " 到第 頁,共$pagenum 頁";
- }
- }
- }
- ?>
-
-
複製代碼
|