首頁  >  文章  >  後端開發  >  php 分頁原理詳解

php 分頁原理詳解

高洛峰
高洛峰原創
2017-03-16 15:48:561764瀏覽

在看本文之前,請確保你已經掌握了PHP的一些知識以及MYSQL的查詢操作基礎哦。

作為一個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 20,10                //第三頁
Limit 30,10        沒錯,第一個參數每翻一頁就增加10,可是第二個參數是不變的。
也就是說咱們設法根據頁數來改變第一個參數的值 ,就可以進行分頁顯示數據了,怎麼樣,原理是不是很簡單?

可是要怎麼設法根據頁數來改變第一個參數的值呢?首先,咱們要有一個頁數的值,用url的GET方式取得。
例如index.php?page=18

相信大部分的大大對這個東西不陌生吧,這種url位址可是隨處可見,其中的page參數的作用就是傳入要顯示的頁數。


咱們透過一段程式碼來看一看究竟是如何實現的吧:

<?php

/*

Author:默默
Date :2006-12-03

*/

$page=isset($_GET[&#39;page&#39;])?intval($_GET[&#39;page&#39;]):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
$num=10;         //每页显示10条数据

$db=mysql_connect("host","name","pass");           //创建数据库连接
$select=mysql_select_db("db",$db);                 //选择要操作的数据库

/*
首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,总页数 具体的公式就是
总数据数 除以 每页显示的条数,有余进一 。
也就是说10/3=3.3333=4 有余数就要进一。
*/

$total=mysql_num_rows(mysql_query("select * from table")); //查询数据的总数total
$pagenum=ceil($total/$num);      //获得总页数 pagenum

//假如传入的页数参数apge 大于总页数 pagenum,则显示错误信息
If($page>$pagenum || $page == 0){
       Echo "Error : Can Not Found The page .";
       Exit;
}

$offset=($page-1)*$num;         //获取limit的第一个参数的值 offset ,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。             (传入的页数-1) * 每页的数据 得到limit第一个参数的值

$info=mysql_query("select * from table limit $offset,$num ");   //获取相应页数所需要显示的数据
While($it=mysql_fetch_array($info)){
       Echo $it[&#39;name&#39;]."<br />";
}                                                              //显示数据

For($i=1;$i<=$pagenum;$i++){

       $show=($i!=$page)?"<a href=&#39;index.php?page=".$i."&#39;>$i</a>":"<b>$i</b>";
       Echo $show." ";
}

/*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下
1 2 3 4 5 6
*/
?>

假如你仔細的讀過上面的程式碼,把資料庫連接和查詢的表格替換成你的,那麼就能看見它的執行效果哦。

是不是很簡單,只要動動腦筋,可以讓它顯示的更為個性化哦,給大家出一個小題,如何實現“首頁 上一頁 下一頁 尾頁”這種格式的分頁呢?

總結:

原型:      Select * from table limit 0,10程式: select * from table limit $offset,$num ($offset取值是:傳入的頁數-1   顯示的數據,多為固定常數值)總分頁數:總數據% 每頁顯示的條數 ,有餘進一
    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 分頁原理詳解相關文章請關注PHP中文網!

相關文章:

使用PHP實作簡單分頁類別及其詳細的使用方法

php分頁 PHP分頁顯示製作詳細解說

php分頁 PHP分頁顯示製作詳細解說

php分頁摘要頁碼

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn