JavaShuo
欄目
標籤
24-PHP+MySQL分頁技術詳解
時間 2020-07-19
標籤
php+mysql
php
mysql
分頁
技術
詳解
欄目
PHP
简体版
原文
原文鏈接
PHP+MySQL分頁技術詳解
今天,咱們來看一下PHP+MySQL的分頁技術!首先,咱們先須要瞭解一下分頁的原理是什麼?
1、分頁的原理
其實,分頁的原理異常簡單,其利用了MySQL的select語句的limit子句來實現的!
Limit子句的語法結構是:
limit offset,rowCount;
這兩個參數的含義是記錄的偏移值和每次顯示的記錄數,對於每次顯示的記錄數其實就是決定每頁顯示幾條記錄!這個值由開發者來任意決定,固然確定最小值要大於等於1。
咱們來研究一下offset參數,咱們先假設一種狀況:記錄無限多,而每頁顯示10條記錄,咱們來推算一下吧!另外偏移值是從0開始計算的!
當前頁 偏移值
1 0
2 10
3 20
4 30
…
n (n-1) * 10
那麼這就是偏移值的計算公式:
(當前頁碼 – 1 ) * 每頁顯示的記錄數
因此limit參數的使用就變成了
limit (當前頁碼 – 1 ) * 每頁顯示的記錄數,每頁顯示的記錄數
另外,有的朋友可能問了,若是最後一頁不足10條那怎麼辦呢?若是最後一頁不足10條,則將顯示剩餘的所有記錄,也就是說若是總記錄數爲63條記錄;每頁顯示10條記錄,那麼第7頁只顯示3條記錄!
2、分頁的過程
若是想實現分頁的過程,那麼必須通過如下幾步:
1. 獲取總記錄數
2. 指定每頁顯示的記錄數
3. 根據1和2來計算出總頁數
4. 分頁顯示記錄
好了,咱們一步一步的來實現!
1. 獲取總記錄數
$sql = 「select * from test」;
$result = mysql_query($sql);
$rowsNum = mysql_num_rows($result);
mysql_free_result($result);
2. 指定每頁顯示的記錄數
$pageSize = 2;
其實這句話從純粹的PHP角度來說就是給變量賦值!
3. 獲取總頁數
$pageCount = ceil($rowsNum / $pageSize);
好了,最起碼到這裏爲止,咱們能夠來顯示頁碼了!
<?php
$conn = @mysql_connect("localhost","root","ccjsj") || die("服務器鏈接錯誤");
@mysql_select_db("test") || die("指定數據庫不存在");
$sql = "select * from test";
$result = mysql_query($sql) ;
$rowsNum = mysql_num_rows($result);
$pageSize = 2;
$pageCount = ceil($rowsNum / $pageSize);
?>
<body>
<table width="850" border="0" cellpadding="5" cellspacing="1" bgcolor="#666666">
<?php if($rowsNum) {?>
<tr>
<td bgcolor="#FFFFFF">編號</td>
<td bgcolor="#FFFFFF">用戶名</td>
</tr>
<tr>
<td bgcolor="#FFFFFF"> </td>
<td bgcolor="#FFFFFF"> </td>
</tr>
<tr>
<td colspan="2" bgcolor="#FFFFFF">
<?php
if($rowsNum <= $pageSize)
{
echo "1";
}
else
{
for($i=1;$i<=$pageCount;$i++)
echo "{$i} ";
}
?>
</td>
</tr>
<?php } else { ?>
<tr>
<td bgcolor="#FFFFFF">對不起,數據表中不存在符合條件的記錄!</td>
</tr>
<?php }?>
</table>
運行結果以下:
好了,先顯示記錄內容吧!
<?php
...
...
?>
<body>
<table width="850" border="0" cellpadding="5" cellspacing="1" bgcolor="#666666">
<?php if($rowsNum) {?>
<tr>
<td bgcolor="#FFFFFF">編號</td>
<td bgcolor="#FFFFFF">用戶名</td>
</tr>
<?php while($row = mysql_fetch_array($result)){ ?>
<tr>
<td bgcolor="#FFFFFF"><?=$row['id']?></td>
<td bgcolor="#FFFFFF"><?=$row['name']?></td>
</tr>
<?php } ?>
<tr>
<td colspan="2" bgcolor="#FFFFFF">
<?php
if($rowsNum <= $pageSize)
{
echo "1";
}
else
{
for($i=1;$i<=$pageCount;$i++)
echo "{$i} ";
}
?>
</td>
</tr>
<?php } else { ?>
<tr>
<td bgcolor="#FFFFFF">對不起,數據表中不存在符合條件的記錄!</td>
</tr>
<?php }?>
</table>
但運行結果以下:
爲何結果會是這樣呢?
緣由就是在咱們如今的結果集是select * from test來的,而應該是select * from test limit X,Y來得到的!那麼,怎麼才能夠獲得咱們指望的結果集呢,那就要來研究一下頁碼了!由於,咱們在前面已經推算過了,因此,咱們只要知道用戶單擊的那個連接,那麼就能夠根據前面推算的公式來計算偏移值了!
那麼怎麼知道用戶單擊的那個連接呢?若是將頁碼傳遞給本身那不就能夠了嗎!好了,就這麼幹吧!
<?php
$conn = @mysql_connect("localhost","root","ccjsj") || die("服務器鏈接錯誤");
@mysql_select_db("test") || die("指定數據庫不存在");
$sql = "select * from test";
$result = mysql_query($sql) ;
$rowsNum = mysql_num_rows($result);
$pageSize = 2;
$pageCount = ceil($rowsNum / $pageSize);
$pageno = $_GET["pageno"];
$offset = ($pageno -1) * $pageSize;
$sql .= " limit {$offset},{$pageSize}";
$result = mysql_query($sql);
?>
<body>
<table width="850" border="0" cellpadding="5" cellspacing="1" bgcolor="#666666">
<?php if($rowsNum) {?>
<tr>
<td bgcolor="#FFFFFF">編號</td>
<td bgcolor="#FFFFFF">用戶名</td>
</tr>
<?php while($row = mysql_fetch_array($result)){ ?>
<tr>
<td bgcolor="#FFFFFF"><?=$row['id']?></td>
<td bgcolor="#FFFFFF"><?=$row['name']?></td>
</tr>
<?php } ?>
<tr>
<td colspan="2" bgcolor="#FFFFFF">
<?php
if($rowsNum <= $pageSize)
{
echo "1";
}
else
{
for($i=1;$i<=$pageCount;$i++)
echo "<a href=\"{$_SERVER['PHP_SELF']}?pageno={$i}\">{$i}</a> ";
}
?>
</td>
</tr>
<?php } else { ?>
<tr>
<td bgcolor="#FFFFFF">對不起,數據表中不存在符合條件的記錄!</td>
</tr>
<?php }?>
</table>
運行結果以下:
怎麼會錯了呢!仔細一下,原來問題在$_GET[「pageno」],在用戶剛剛訪問該頁碼時,用戶沒有單擊任何的連接,那麼$_GET[‘pageno’]的返回值就是空,而空-1則等於-1,那麼偏移值則等於-1*2,那就成了-2了,因此纔會報錯的!那麼只要將初始的頁碼改變1就能夠了!
if ($pageno == "") $pageno = 1;
運行結果以下:
好了,今天的話題就先到這兒,其實,這個東西還存在一些bug和不足,咱們慢慢來升級吧!
各位晚安!
相關文章
1.
java分頁技術實現詳解
2.
分頁技術
3.
web分頁技術
4.
PHP 分頁技術
5.
分頁技術--sql語句的分頁
6.
JQuery技術詳解
7.
LOD技術詳解
8.
CDN技術詳解
9.
RAID技術詳解
10.
JNI技術詳解
更多相關文章...
•
XML 相關技術
-
XML 教程
•
Hibernate的快照技術
-
Hibernate教程
•
三篇文章瞭解 TiDB 技術內幕——說存儲
•
三篇文章瞭解 TiDB 技術內幕 —— 說計算
相關標籤/搜索
CDN技術詳解
分步詳解
技術解析
技術分享
技術分析
詳解
分頁
註解詳解
技術
技術美術
PHP
MySQL
Spring教程
MyBatis教程
Redis教程
技術內幕
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
「插件」Runner更新Pro版,幫助設計師遠離996
2.
錯誤 707 Could not load file or assembly ‘Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKe
3.
Jenkins 2018 報告速覽,Kubernetes使用率躍升235%!
4.
TVI-Android技術篇之註解Annotation
5.
android studio啓動項目
6.
Android的ADIL
7.
Android卡頓的檢測及優化方法彙總(線下+線上)
8.
登錄註冊的業務邏輯流程梳理
9.
NDK(1)創建自己的C/C++文件
10.
小菜的系統框架界面設計-你的評估是我的決策
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
java分頁技術實現詳解
2.
分頁技術
3.
web分頁技術
4.
PHP 分頁技術
5.
分頁技術--sql語句的分頁
6.
JQuery技術詳解
7.
LOD技術詳解
8.
CDN技術詳解
9.
RAID技術詳解
10.
JNI技術詳解
>>更多相關文章<<