章节
问答
课签
笔记
评论
占位
占位

PHP数据库操作之查询分页数据

上一节中,我们了解到通过循环可以获取一个查询的所有数据,在实际应用中,我们并不希望一次性获取数据表中的所有数据,那样性能会非常的低,因此会使用翻页功能,每页仅显示10条或者20条数据。

通过mysql的limit可以很容易的实现分页,limit m,n表示从m行后取n行数据,在PHP中我们需要构造m与n来实现获取某一页的所有数据。

假定当前页为$page,每页显示$n条数据,那么m为当前页前面所有的数据,既$m = ($page-1) * $n,在知道了翻页原理以后,那么我们很容易通过构造SQL语句在PHP中实现数据翻页。

$page = 2;
$n = 2;
$m = ($page - 1) * $n;
$sql = "select * from user limit $m, $n";
$result = mysql_query($sql);
//循环获取当前页的数据
$data = array();
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

在上面的例子中,我们使用了$m与$n变量来表示偏移量与每页数据条数,但我们推荐使用更有意义的变量名来表示,比如$pagesize, $start, $offset等,这样更容易理解,有助于团队协作开发。

任务

构建分页查询语句,实现翻页功能。

?不会了怎么办

在第10行以后输入以下代码

$offset = ($page - 1) * $pagesize;
$sql = "select * from user limit $offset, $pagesize";
||
1
2
<?php
//
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / qq_慕无忌0416094
在数据库不存在的情况下也只能用  error_reporting(0);   来偷鸡了😂

最新回答 / 不刷牙的北极熊
你可能理解错了!limit的第一个参数是指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目而不是第几个数。像limit(5, 10)。它检索的不是第5个偏移量到第10个偏移量,而是第5个偏移量到第15个偏移量。也就是拿到数据是第6-15。嗯,应该是这样理解的。

最新回答 / 慕数据0551719
mysql_fetch_array()现在已经被弃用了,使用mysqli或者PDO扩展,比如:mysqli_fetch_array()

已采纳回答 / 仙士可
这个很好理解啊,limit数据库操作是指,第n条记录开始,然后查n条记录,比如limit(0,10),那就是从第0条记录开始,查10条记录所以,第一页数据是从0条开始查page_size条记录,那么第 二页就是从第一页之后的page_size条开始,再查page_size条,所以是页数减一再乘以每页的数据了

最新回答 / 慕数据0551719
当前页面数量是从前端传过来的,现在只是为了测试

最新回答 / 放狗过来
select * from user limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1条开始,取n条。select * from user limit 2,4即取出第3条至第6条,4条记录这里你用$m和$n,如果赋值是int(整型)应该是没问题的亲

最新回答 / 梵音音音
这里是巧合吧正好计算出来数值相同,要是让你显示第98765页的所有数据呢?显然直接设置page=98765然后代入公式,而不是自己去计算$offset。

最新回答 / 慕桂英9498379
不好意思啊,,付错代码了,,这个问题怎么删除啊

已采纳回答 / weibo_忆枫叶的梦_0
虽然不明白具体要干什么,但是作为while里面的判断条件,应该用"=="或者"==="来做比较判断,"="表示赋值,即将mysql_fetch_assoc($result,MYSQL_ASSOC)取到的值赋给$row

最赞回答 / 非专业人士
mysql_fetch_array()是把每一行作为一个数组存放,data不声明成数组的话你每次操作都在重新赋值,并没把数组拿到

最新回答 / 慕侠0718635
这句话说明了从第几行开始运行的。比如你想读取第二页(也就是第一个第三行结束时,下一个第三行开始时)的三行信息,那么用第二页减一乘以要读取的行数(三行)等于三,也就是说limit  3,3 。表示从第三行开始读取后三行。也就完成了读取第二页的三行信息的任务。

最新回答 / 坚持MyDream
谢谢上面两位,问题解决了, while() 括号里只要值不为0和空,就循环                      $row=mysql_fetch_assoc($result)提取一行$result的记录以数组形式存到$row里,                       while(){ $data[]=$row}    $data[]=$row 以一维数组$row为成员组成二维数组$data;

最赞回答 / 黑V先生
推算一下,当page=1,为当前页。根据$m = ($page - 1) * $n; $m=0; $n为每页显示数目。select * from user limit $m, $n得到的是从0开始显示$n条。当page=2时,$m=$n; select * from user limit $m, $n得到的是从$n开始显示$n条.....这逻辑还不能明白么~
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言