程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 默默小談PHP@MYSQL分頁原理及實現

默默小談PHP@MYSQL分頁原理及實現

編輯:關於PHP編程

默默小談PHP&MYSQL分頁原理及實現

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

作為一個Web程序,經常要和不計其數的數據打交道,比如會員的數據,文章數據,假如只有幾十個會員那很好辦,在一頁顯示就可以了,可是假如你的網站是幾千甚至幾十萬會員的話,如果都在一頁打開的話無論對浏覽器還是觀看者都是一種折磨。

相信每個學習PHP的新手都會對分頁這個東西感覺很頭疼,不過有了默默的這一水帖,你肯定會拍拍腦袋說,嘿,原來分頁竟然如此簡單?的確,現在請深呼吸一口新鮮的空氣,仔細的聽默默給你一點一點的分解。

假設我們要處理1000條數據,要在每頁中顯示10條,這樣的話就會分100頁來顯示,咱們先看一看在mysql裡提取10條信息是如何操作的。

Select * from table limit 0,10

上面是一句很簡單的mysql查詢語句,它的作用是從一個名叫table的表裡提取10條數據,並且把所有字段的值都獲得。

關鍵的地方就在這段“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內容到剪貼板PHP代碼:

<?php

/*

Author:默默
Date  :2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):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 id from table")); //查詢數據的總數,id是數據庫中的一個自動賦值的字段
$pagenum=ceil($total/$num);                                    //獲得總頁數

//假如傳入的頁數參數大於總頁數,則顯示錯誤信息
$totalrecord=mysql_num_rows($result);
    $pagesize=10;
    $page=isset($_GET['page'])?$_GET['page']:1;  
    $pagecount=($totalrecord % $pagesize==0)?$totalrecord / $pagesize:(int) ($totalrecord / $pagesize)+1;
    $page=($page>$pagecount || $page<1 )?1:$page;
    $start=$pagesize*($page-1);
    $res=mysql_query("select * from tablename  order by id desc limit $start,$pagesize")

//獲取相應頁數所需要顯示的數據,name是數據裡的一個字段
While($rsmysql_fetch_array($res)){
       Echo $rs['name']."<br />";
}                                                              //顯示數據
  
下面就用for了,就不說了哒.還其它很多辦法.萬變不離其中.

/*顯示分頁信息,假如是當頁則顯示粗體的數字,其余的頁數則為超連接,假如當前為第三頁則顯示如下
1 2 3 4 5 6
*/
?>

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved