一般情况我们写数据分页都是如下代码

  1. //分页码
  2. $page = $_REQUEST['page'];
  3. //显示条数
  4. $limit = 10;
  5. //分页开始条数
  6. $start_limit = ($page - 1) * $limit;
  7. //运行sql语句得到的结果
  8. $list = model('table')->limit("$start_limit, $limit")->findAll();
  9. //返回数据
  10. return $list;

比如我们有102条数据,到了11页的时候就会只有2条数据,显然这不是我们要的结果。如果我们想要第11页数据显示的是最后的2条+第1页的前8条,就不能用这种方法了。

  1. //分页码
  2. $page = $_REQUEST['page'];
  3. //显示条数
  4. $limit = 10;
  5. //数据总条数
  6. $count = model('table')->count();
  7. //取模
  8. $pattern = (($page - 1) * $limit) % $count;
  9. //余条数
  10. $pattern_limit = $pattern % $limit;
  11. //获取数据
  12. $list = model('table')->limit("$pattern, $limit")->findAll();
  13. //数据条数小于页面显示条数 继续查询进行追加
  14. if(count($list) < $limit){
  15. //差数据条数
  16. $remainder = $limit - count($list);
  17. //重头开始查询数据
  18. $new_list = model('table')->limit("0, $remainder")->findAll();
  19. //合并数据
  20. $list = array_merge($list, $new_list);
  21. }
  22. return $list;