1、前言
分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種**實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原理和實現方法有所了解。本文適合初學者閱讀,所有示例**均使用php編寫。
2、原理
所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這裡需要兩個初始的引數:
每頁多少條記錄($pagesize)?
當前是第幾頁($currentpageid)?
前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")
or die("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 )else
} else
第一頁||'; } |
尾頁';
} // 獲取資料,以二維陣列格式返回結果
if( $amount )
}else
// 沒有包含顯示結果的**,那不在討論範圍,只要用foreach就可以很簡單的用得到的二維陣列來顯示結果
?>
4、oo風格**
以下**中的資料庫連線是使用的pear db類進行處理
**:
// filename: pager.class.php
// 分頁類,這個類僅僅用於處理資料結構,不負責處理顯示的工作
// filename: test_pager.php
// 這是一段簡單的示例**,前邊省略了使用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();
numitems."'>首頁
||"; } |
numpages."&numitems=".$pager->numitems."'>尾頁
"; }
?>
需要說明的地方有兩個:
這個類僅僅處理資料,並不負責處理顯示,因為我覺得將資料的處理和結果的顯示都放到乙個類裡邊實在是有些勉強。顯示的時候情況和要求多變,不如自己根據類給出的結果處理,更好的方法是根據這個pager類繼承乙個自己的子類來顯示不同的分頁,比如顯示使用者分頁列表可以:
**:
class memberpager extends 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方法。
ok,寫完收功,希望花時間看完這些文字的你不覺得是浪費了時間。
PHP分頁顯示詳解
1 前言 分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種 實在是和呼吸一 樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的...
oracle分頁顯示
oracle中rownum表示行號,比如你想返回前10行,sql如下 select from mytable where rownum 10 如果返回90 100行,那行下面的語句是不對的 select from mytable where rownum 90 and rownum 100 orac...
DISPLAY分頁顯示
displaytag是乙個非常好用的 顯示標籤,適合mvc模式,其主頁在 一 最簡單的情況,未使用標籤 request.setattribute test new reportlist 6 標籤遍歷list裡的每乙個物件,並將物件裡的所有屬性顯示出來。一般用於開發的時候檢查物件資料的完整性。二 使用...