1.6 分页

1.6.1 分析

-- 1、获取当前页码的数据
页码 SQL语句
1 select * from products limit 0,10
2 select * from products limit 10,10
3 select * from products limit 20,10
结论:
$pageno:页码
$startno:起始位置
$pagesize=10:页面大小
公式:$startno=($pageno-1)*$pagesize;

-- 2、如何获取页码
用户点击页面底端页码,传递当前的页面

-- 3、如何获取总页码
记录数 页数 计算
60 6 60/10=6
51 6 ceil(51/10)=6

结论:
$rowcount:总记录数
$pagecount:总页数
公式:$pagecount=ceil($rowcount/$pagesize)

-- 4、如何获取总记录数
select count(*) from products;

PHP-分页_mysql

1.6.2 步骤

第一步:获取总记录数

第二步:求出总页数

第三步:循环显示页码

第四步:通过当前页面,求出起始位置

第五步:获取当前页面数据,并遍历显示

1.6.3 代码实现

将上一讲的MySQLDB类拷贝到站点下,将测试代码删除,只留下类代码,文件名改为MySQLDB.class.php

分页页面代码如下:

<?php
//自动加载类
spl_autoload_register(function($class_name){
require "./{$class_name}.class.php";
});
//获取单例
$param=array(
'user' => 'root',
'pwd' => 'root',
'dbname' => 'data'
);
//获取单例
$db=MySQLDB::getInstance($param);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style type="text/css">
table{
width:780px;
border:solid #000 1px;
}
td,th{
border:solid #000 1px;
}
</style>
</head>

<body>
<?php
$pagesize=10; //页面大小
//第一步:获取总记录数
$rowcount=$db->fetchColumn('select count(*) from products');
//第二步:求出总页数
$pagecount=ceil($rowcount/$pagesize);
//第四步:通过当前页面,求出起始位置
//$pageno=isset($_GET['pageno'])?$_GET['pageno']:1;
$pageno=$_GET['pageno']??1;
$pageno=$pageno<1?1:$pageno;
$pageno=$pageno>$pagecount?$pagecount:$pageno;
$startno=($pageno-1)*$pagesize;
//第五步:获取当前页面数据,并遍历显示
$sql="select * from products limit $startno,$pagesize";
$rs=$db->fetchAll($sql);
?>
<table>
<tr>
<th>编号</th>
<th>商品名称</th>
<th>规格</th>
<th>价格</th>
</tr>
<?php foreach($rs as $row):?>
<tr>
<td><?=$row['proID']?></td>
<td><?=$row['proname']?></td>
<td><?=$row['proguige']?></td>
<td><?=$row['proprice']?></td>
</tr>
<?php endforeach;?>
</table>
<!--第三步:循环显示页码-->
一共有<?=$rowcount?>条记录,每页放<?=$pagesize?>条记录,当前是<?=$pageno?>页 <br />
【<a href="?pageno=1">首页</a>】
【<a href="?pageno=<?=$pageno-1?>">上一页</a>】
<?php for($i=1; $i<=$pagecount; $i++):?>
<a href="?pageno=<?=$i?>"><?=$i?></a>
<?php endfor;?>
【<a href="?pageno=<?=$pageno+1?>">下一页</a>】
【<a href="?pageno=<?=$pagecount?>">末页</a>】
</body>
</html>

运行结果

PHP-分页_php_02

1.6.4 分页优化

在上面的分页代码中,虽然SQL语句比较经典,但是每次都要获取不需要的数据,浪费资源

$sql="select * from products limit $startno,$pagesize";

优化

$sql="select * from products where proid>=(select proid from products limit $startno,1) limit $pagesize";