分页查询

1. 分页查询

  1. select * from tableName limit [start,] count;
  • start: 表示起始时的记录位置 ,默认从0开始计算,(可以省略,起始位置 为0)
  • count: 表示获取数据的条数

2. 起始位置计算

  1. start = (page - 1) * count

3. 总页数计算

  1. allPage = ceil(allRow / pageSize);

所有记录条数 / 页面显示条数 后通过 ceil进行向上取整

4. 数学计算函数

  • ceil 向上进一取整

    1. ceil(float $value): float
  • floor 舍去取整

    1. floor(float $value): float
  • round 四舍五入取整

    1. round(float $val, int $precision = 0, int $mode = PHP_ROUND_HALF_UP): float
    1. <?php
    2. var_dump(round(3.4));
    3. var_dump(round(3.5));
    4. var_dump(round(3.6));
    5. var_dump(round(3.6, 0));
    6. var_dump(round(5.045, 2));
    7. var_dump(round(5.055, 2));
    8. var_dump(round(345, -2));
    9. var_dump(round(345, -3));
    10. var_dump(round(678, -2));
    11. var_dump(round(678, -3));
    12. ?>

2. 案例讲解(班级数据分页显示)

  1. <?php
  2. // 连接数据库
  3. $url = "mysql:host=mysql;dbname=database_lesson_30511_14_11204";
  4. $user = "lesson_30511_14_11204";
  5. $passwd = "c6e5d1f2cd01ae3ac950a5745ea6fbdf";
  6. $pdo = new PDO($url,$user,$passwd);
  7. // 相关变量
  8. $page = 1; // 当前页码
  9. $pageSize = 7; // 当前每页显示记录数
  10. $start = 0; // 获取分页数据时的起始位置
  11. $allNum = 0; // 表中所有的记录数
  12. $allPage = 0; // 表中所有的页数
  13. // 获取所有的记录数
  14. $sql = "select count(*) from class;";
  15. $st = $pdo->query($sql);
  16. // 保存所有的记录数
  17. $allNum = $st->fetch()[0];
  18. // 根据所有记录数和每页显示记录数,计算出所有页数
  19. $allPage = ceil($allNum/$pageSize);
  20. // 通过查询参数,获取当前页码
  21. if(isset($_GET['p'])){
  22. $page = $_GET['p'];
  23. }
  24. // 通过页码云计算起始查询位置,进进行获取数据
  25. $start = ($page-1)*$pageSize;
  26. $sql = "select * from class limit {$start}, {$pageSize}";
  27. $st = $pdo->query($sql);
  28. $res = $st->fetchAll(PDO::FETCH_ASSOC);
  29. ?>
  30. <!DOCTYPE html>
  31. <html lang="en">
  32. <head>
  33. <meta charset="UTF-8">
  34. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  35. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  36. <title>Document</title>
  37. <style>
  38. #content{
  39. width:1200px;
  40. text-align: center;
  41. margin:0 auto;
  42. background: cyan;
  43. }
  44. #btn{
  45. width:1200px;
  46. list-style: none;
  47. display: flex;
  48. justify-content: center;
  49. }
  50. #btn>li{
  51. border: 1px solid blue;
  52. border-radius:10px;
  53. width:100px;
  54. margin:0 50px;
  55. }
  56. a{
  57. text-decoration: none;
  58. }
  59. </style>
  60. </head>
  61. <body>
  62. <div id="content">
  63. <div id='title'>
  64. <h1>班级信息显示</h1>
  65. </div>
  66. <div id='table'>
  67. <table border="1" align='center' width="1000" >
  68. <tr background="#ccc">
  69. <th>班级名称</th>
  70. <th>班主任</th>
  71. <th>班级人数</th>
  72. <th>班主任电话</th>
  73. </tr>
  74. <!--对查询数据进行显示-->
  75. <?php foreach($res as $val){ ?>
  76. <tr>
  77. <td> <?php echo $val["name"]; ?></td>
  78. <td> <?php echo $val["teacher_name"]; ?></td>
  79. <td> <?php echo $val["number"]; ?></td>
  80. <td> <?php echo $val["phone"]; ?></td>
  81. </tr>
  82. <?php } ?>
  83. </table>
  84. </div>
  85. <!--控制按钮-->
  86. <div id='ctl'>
  87. <ul id='btn'>
  88. <li>
  89. <!--如果是到首页,固定页码为1-->
  90. <a href="<?php echo "index.php?p=1"; ?>">
  91. 首页
  92. </a>
  93. </li>
  94. <li>
  95. <!--如果当前页面不是第一页,则可以进行页面减一,跳到上一次,否则一直为第一页-->
  96. <a href="<?php
  97. if($page != 1){
  98. echo "index.php?p=" . ($page - 1);
  99. }else{
  100. echo "index.php?p=1";
  101. }
  102. ?>">
  103. 上一页
  104. </a>
  105. </li>
  106. <li>
  107. <!--如果当前页面不是第一页,则可以进行页面加一,跳到下一次,否则一直为末页-->
  108. <a href="<?php
  109. if($page != $allPage){
  110. echo "index.php?p=" . ($page + 1);
  111. }else{
  112. echo "index.php?p=" . $allPage;
  113. }
  114. ?>">
  115. 下一页
  116. </a>
  117. </li>
  118. <li>
  119. <!-- 固定页码为最后一页-->
  120. <a href="<?php echo "index.php?p=" . $allPage;?>">
  121. 末页
  122. </a>
  123. </li>
  124. </ul>
  125. </div>
  126. </div>
  127. </body>
  128. </html>