THINKPHP中分页代码的问题?

$User = M('User'); // 实例化User对象
$count      = $User->where('status=1')->count();// 查询满足要求的总记录数
$Page       = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$show       = $Page->show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板

其中我对第二句查询满足条件的总记录数还有点迷惑
$count = $User -> count();如果这样写的话不就是查询表中所有数据的总记录数,这样理解有问题么?这样写在页面是显示不出来的!

阅读 3.1k
5 个回答
$count = $User->where('status=1')->count();// 查询满足要求的总记录数

满足要求?要求是什么?要求是 where('status=1'),当然也就是数据表中 status=1 的记录数并不是你说的要查询表中所有数据的总记录数。

理解没问题,主要去除所有符合条件的数据的数量就可以

不管是status=1还是sex=man

count不带条件是全部数据,你的不显示是有多种原因,需要仔细排查,多看一下源码,如图部分

clipboard.png

分页其实很简单,一个是要知道2个参数

总记录条数,每页的记录条数。比方说78条数据,每页10条,78/10取整,才知道要分8页
limit($Page->firstRow.','.$Page->listRows)这个其实是通过当前页码去换算,要把第几条到第几条的数据select出来。
比如说,按照刚才的78,第八页,那我select语句其实就是 limit 70 10 , 从第70条数据开始,查询10条数据

在配置文件中开启页面调试

'SHOW_PAGE_TRACE' =>true,

查看下sql语句是否有 select count(*)... 语句,下断点,单步调试,看看第二步有没有正确获取到$count

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题