如何用PHP从Cassandra DB实现分页获取数据及上下页链接
实现数据表分页(上一页/下一页)及分页查询语句编写
需求:给数据表添加上一页、下一页分页功能,初始加载显示20条数据,点击下一页加载后续20条,同时编写对应的分页查询语句。
一、HTML分页链接实现
原静态链接无法传递页码参数,需要改成动态生成的链接,同时增加逻辑判断避免无效点击:
<div> <!-- 上一页:仅当前页大于1时显示 --> <?php if ($page > 1): ?> <a style="margin-left:5px;" href="?page=<?php echo $page - 1; ?>" class="previous">« 上一页</a> <?php endif; ?> <!-- 下一页:仅当前页小于总页数时显示 --> <?php if ($page < $totalPages): ?> <a style="margin-left:5px;" href="?page=<?php echo $page + 1; ?>" class="next">下一页 »</a> <?php endif; ?> </div>
二、PHP与SQL分页核心逻辑
注意修正原代码中SQL语句的语法问题,同时补充边界校验和总记录数查询逻辑:
// 每页显示的记录数 $recordsPerPage = 20; // 获取当前页码:URL无page参数时默认显示第1页,同时确保页码不小于1 $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $page = max($page, 1); // 查询总记录数(用于计算总页数) $countQuery = "SELECT COUNT(*) AS total FROM history " . $whereClause; $countResult = mysqli_query($yourDbConnection, $countQuery); $totalCount = mysqli_fetch_assoc($countResult)['total']; // 计算总页数:向上取整,避免最后一页记录不足的情况 $totalPages = ceil($totalCount / $recordsPerPage); // 确保页码不超过总页数,防止用户手动输入无效页码 $page = min($page, $totalPages); // 计算偏移量:(当前页-1)*每页条数,确定从哪条记录开始查询 $offset = ($page - 1) * $recordsPerPage; // 分页查询数据:注意LIMIT和OFFSET之间必须有空格,否则SQL会报错 $query = "SELECT * FROM history " . $whereClause . " LIMIT " . $recordsPerPage . " OFFSET " . $offset . ";"; // 执行查询并处理结果 $result = mysqli_query($yourDbConnection, $query);
三、关键逻辑说明
- 初始加载时URL无
page参数,$page默认是1,偏移量为0,自动查询前20条数据 - 点击下一页时,URL会带上
page=2,偏移量变为20,查询第21-40条数据,以此类推 - 通过
max()和min()限制页码范围,避免用户手动输入负数或超出总页数的页码 $whereClause是自定义的查询条件(比如WHERE status = 'valid'),如果没有条件直接留空即可
内容的提问来源于stack exchange,提问作者landa
相关产品推荐
相关产品推荐

