最近好久才写一篇博客,暑假生活太惬意,让我放松了好多,开学了,我要慢慢开始找回自己的状态。
mysql limit
我是使用mysql的limit语句来实现的分页效果,limit实际可以有两种用法:
- select * from tablename limit 10
- select * from tablename limit 100,10
第一种语句是取符合条件的前十条记录,后者实现的是排除前100条符合条件的记录之后,再来取十条符合条件的记录。
所谓实现分页,就是可以利用第二种limit写法来实现,假设我们有30条记录,规定每一页显示10条记录,那么我们需要三页来显示所有的记录:
- 第一页: select * from tablename limit 0,10;
- 第二页: select * from tablename limit 10,10;
- 第三页: select * from tablename limit 20,10;
php功能实现
实现分页功能,首页要确认要分多少页,我们需要知道符合条件的记录表到底有多少条?
$stmt = $conn->prepare("select count(*) from cart where paid=0 and del=0 and cuid=:cuid");
$stmt->bindParam(":cuid", $_SESSION["uid"]);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$total_records = $result[0]["count(*)"];
我们查询符合条件的记录数量,除以我们每次显示记录的个数,并且向上取整:
$totalpage = ceil($total_records / $num_rec_per_page);
我们就得到了页面总数。
根据页面上传递过来的page参数来选择性的显示数据;
if($_GET["page"]>$totalpage){
$_GET["page"] = $totalpage;
};
if($_GET["page"]<1){
$_GET["page"] = 1;
};
我们传递的page参数不可以小于1,也不可以大于页面的总数。
然后再根据page参数来定制mysql查询语句:
$stmt_page = $conn->prepare("select * from cart where paid=0 and del=0 and cuid=:cuid order by cid asc limit :prev , :per");
$stmt_page->bindParam(":cuid", $_SESSION["uid"]);
$stmt_page->bindParam(":prev",$prev);
$stmt_page->bindParam(":per",$per );
$per=5;
$prev = (intval($_GET["page"])-1)*$per;
$stmt_page->execute();
$result_page = $stmt_page->fetchAll(PDO::FETCH_ASSOC);
就这样,简单的mysql分页就实现了,当然这好像有点简单过头了,哈哈。