1问答:分页查询的原理与偏移量的计算方法
分析分页的原理:
首先获取数据的总记录数,通过总记录和每页显示的数量得出总页数。
* 1. LIMIT 参数的作用: 偏移量与显示数量
* 2. 如果控制每页显示的数量
* 3. 接收GET参数,用p表示当前页数,每页显示3条
* 4. 需要的参数:
* (1).totalPage 总页数
* (2).totalNumber 一共有多少条数据
* (3).pageSize 每页显示多少条数据
* (4)currentPage 当前第几页
* (5)*.rangeStart 起始页
偏移量的计算公式: (页数-1)*每页显示的数量
* offset = (page-1)*num
2编程: 实现分页查询,要求有上一页,下一页,直接跳到首页和尾页,中间页的生成,以及快速页码跳转功能
实例
<!DOCTYPE html> <html> <head> <title>用户信息表</title> <meta charset="utf-8"> <style> table,th,td{border: 1px solid black;} table { border-collapse: collapse; width: 60%; margin: 30px auto; text-align: center; } table caption {font-size: 1.5rem;margin-bottom: 15px;} table th {background-color: lightskyblue;} h3 {text-align: center;} h3 a { text-decoration: none; margin-left: 10px; border: 1px solid black; display: inline-block; height: 30px; min-width: 30px; padding: 0 10px; background-color: lightgreen; } h3 a:hover{background-color: red;color: white;} form {display: inline;} </style> </head> <body> <?php $pdo = new PDO('mysql:host=127.0.0.1;dbname=edu','root','root'); //手工修改url中的get参数可以实现翻页查询 $page = isset($_GET['p']) ? $_GET['p'] : 1; $offset = ($page-1)*5; $sql = "SELECT * FROM `user` LIMIT {$offset}, 5;"; $stmt = $pdo->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt = $pdo->prepare("SELECT COUNT(*) FROM `user`"); $stmt->execute(); $total = $stmt->fetchColumn(0); $pages = ceil($total / 5); //获取到总页数 $pages ?> <table> <caption>员工信息表</caption> <tr> <th>ID</th> <th>姓名</th> <th>邮箱</th> </tr> <?php foreach ($rows as $row): ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['email']; ?></td> </tr> <?php endforeach; ?> </table> <h3> <a href="http://www.ceshi.com/ceshi1.php?p=1">首页</a> <a href="http://www.ceshi.com/ceshi1.php?p=<?php echo (($page-1)==0)? 1 : ($page-1); ?>">上一页</a> <!-- <a href="http://www.ceshi.com/ceshi1.php?p=1">1</a> <a href="http://www.ceshi.com/ceshi1.php?p=2">2</a> <a href="http://www.ceshi.com/ceshi1.php?p=3">3</a> --> <!--生成中间页码--> <!--将当前页码的背景色锁定:当前页码等于GET中的参数p--> <?php for($i=1; $i<=$pages; $i++): ?> <a href="http://ceshi.com/ceshi1.php?p=<?php echo $i ?>" <?php echo ($i == $page) ? 'style="background-color: red;"' : '';//设置被选中的当前页突出显示 ?> > <?php echo $i ?> </a> <?php endfor; ?> <a href="http://www.ceshi.com/ceshi1.php?p=<?php echo (($page+1)>$pages)?$pages:($page+1); ?>">下一页</a> <a href="http://www.ceshi.com/ceshi1.php?p=<?php echo $pages; ?>">尾页</a> <!--实现页面的快速跳转--> <form action="" method="get"> 第 <select name="p" id=""> <?php for($i=1; $i<=$pages; $i++): ?> <!-- 循环输出全部页码,并锁定当前页--> <option value="<?php echo $i; ?>" <?php if($page==$i){echo 'selected';} //实现跳转后当前页面和选中页码一样。不要这段代码依然可以正常工作,不过跳转后会显示默认选项 ?> > <?php echo $i; ?> </option> <?php endfor; ?> </select>页 <button>跳转</button> </form> </h3> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例