1、前言分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種**實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原理和實現方法有所了解。本文適合初學者閱讀,所有示例**均使用php編寫。
2、原理所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這裡需要兩個初始的引數:
每頁多少條記錄($pagesize)?
當前是第幾頁($currentpageid)?
現在只要再給我乙個結果集,我就可以顯示某段特定的結果出來。
以mysql資料庫為例,如果要從表內擷取某段內容,sql語句可以用:select
* from table limit offset, rows。看看下面一組sql語句,嘗試一下發現其中的規率。
前10條記錄:select * from
table limit 0,10
第11至20條記錄:select * from table limit
10,10
第21至30條記錄:select * from table limit
20,10
這一組sql語句其實就是當$pagesize=10的時候取表內每一頁資料的sql語句,我們可以總結出這樣乙個模板:
select
* from table limit ($currentpageid - 1) * $pagesize,
$pagesize
拿這個模板代入對應的值和上邊那一組sql語句對照一下看看是不是那麼回事。搞定了最重要的如何獲取資料的問題以後,剩下的就僅僅是傳遞引數,構造合適的sql語句然後使用php從資料庫內獲取資料並顯示了。以下我將用具體**加以說明。
3、簡單**請詳細閱讀以下**,自己除錯執行一次,最好把它修改一次,加上自己的功能,比如搜尋等等。
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
ordie("could not connect: " . mysql_error());//獲取當前頁數
if( isset($_get['page']) )else//每頁數量
$pagesize = 10;//獲取總資料量
$sql = "select count(*) as amount from table";$result = mysql_query($sql);$row = mysql_fetch_row($result);$amount = $row['amount'];//記算總共有多少頁
if( $amount) //如果總資料量小於$pagesize,那麼只有一頁
if( $amount % $page_size )elseelse//翻頁鏈結
}//獲取資料,以二維陣列格式返回結果
if( $amount)else//沒有包含顯示結果的**,那不在討論範圍,只要用foreach就可以很簡單的用得到的二維陣列來顯示結果
4、oo風格**以下**中的資料庫連線是使用的pear db類進行處理
// 分頁類,這個類僅僅用於處理資料結構,不負責處理顯示的工作
classpager
//總頁數
if ( $this->numitems > 0)
if ( $this->numitems % $this->pagesize )
elseelseswitch ( $this->currentpageid )
if ( $this->numpages > 1)
if ( !$this->isfirstpage )
}return true;
* 返回結果集的資料庫連線
* 在結果集比較大的時候可以直接使用這個方法獲得資料庫連線,然後在類之外遍歷,這樣開銷較小
* 如果結果集不是很大,可以直接使用getpagedata的方式獲取二維陣列格式的結果
* getpagedata方法也是呼叫本方法來獲取結果的
functiongetdatalink()
elseelsereturn $result;
}elseelsefunction _setoptions($option)
return true;
// 這是一段簡單的示例**,前邊省略了使用pear db類建立資料庫連線的**
require "pager.class.php";if ( isset($_get['page']) )
else$sql = "select * from table order by id";$pager_option = array("sql" => $sql,
"pagesize" => 10,
"currentpageid" => $page);if ( isset($_get['numitems']) )
$pager = @new pager($pager_option);$data = $pager->getpagedata();if ( $pager->isfirstpage )
}if ( $pager->islastpage )
需要說明的地方有兩個:
這個類僅僅處理資料,並不負責處理顯示,因為我覺得將資料的處理和結果的顯示都放到乙個類裡邊實在是有些勉強。顯示的時候情況和要求多變,不如自己根據類給出的結果處理,更好的方法是根據這個pager類繼承乙個自己的子類來顯示不同的分頁,比如顯示使用者分頁列表可以:
/// 呼叫
if ( isset($_get['page']) )
else$sql = "select * from members order by id";$pager_option = array("sql" => $sql,
"pagesize" => 10,
"currentpageid" => $page);if ( isset($_get['numitems']) )
$pager = @new memberpager($pager_option);$pager->showmemberlist();?>
第二個需要說明的地方就是不同資料庫的相容性,在不同的資料庫裡截獲一段結果的寫法是不一樣的。
mysql: select * from table
limit offset, rows
pgsql: select * from table limit m offset
n所以要在類裡邊獲取結果的時候需要使用pear db類的limitquery方法。
高手講解PHP分頁類
獲取顯示 首頁 的 return string function first page style return this get link this get url 1 this first page,style 例項應用 1 2require once libs classes page.cla...
PHP通用分頁類
page.class.php 分頁類 呼叫方式 p new page 總條數,顯示頁數,當前頁碼,每頁顯示條數,鏈結 print r p getpages 生成乙個頁碼陣列 鍵為頁碼,值為鏈結 echo p showpages 1 生成乙個頁碼樣式 可新增自定義樣式 總條數,需要顯示的頁數,當前頁,...
PHP分頁類分享
file page.class.php 完美分頁類 page class page else if total 0 else else this limit limit this setlimit 用於設定顯示分頁的資訊,可以進行連貫操作 param string param 是成員屬性陣列conf...