全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何实现基于最后 ID 的双向分页(上一页/下一页)

本文介绍一种不依赖连续 id 的 mysql 双向分页方案:通过记录边界 id 并结合 `array_reverse()` 实现稳定、高效、容错的上一页/下一页导航,完美解决因数据删除导致 id 不连续带来的翻页错乱问题。

在基于 ID 的分页实践中,常见的“游标分页”(Cursor-based Pagination)通常采用 WHERE id 上一页却容易陷入误区:若简单使用 WHERE id 当前页起始 ID 为下界进行反向查询。

✅ 正确思路是:

  • 下一页:WHERE id
  • 上一页:WHERE id > $first_id LIMIT 21 → 获取更大 ID 的数据(自然升序),再反转数组,使其视觉顺序与用户预期一致(即顶部显示 ID=99,底部显示 ID=120)。

以下是完整 PHP + MySQL 实现示例(含关键注释):

prepare("SELECT * FROM table_name WHERE id > ? LIMIT ?");
    $stmt->execute([$_GET['prev'], $limit]);
    $results = array_reverse($stmt->fetchAll(PDO::FETCH_ASSOC));
} elseif ($isNext) {
    // 下一页:查比 $last_id 更小的 21 条(降序)
    $stmt = $db->prepare("SELECT * FROM table_name WHERE id < ? ORDER BY id DESC LIMIT ?");
    $stmt->execute([$_GET['next'], $limit]);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
    // 首页:取最大的 21 条
    $stmt = $db->prepare("SELECT * FROM table_name ORDER BY id DESC LIMIT ?");
    $stmt->execute([$limit]);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// 渲染数据(假设按 id 降序展示)
foreach ($results as $row) {
    echo "ID: {$row['id']} | {$row['title']}";
}

// 生成分页按钮(关键:传递正确的边界 ID)
$firstId = !empty($results) ? $results[0]['id'] : null;
$lastId  = !empty($results) ? end($results)['id'] : null;

// 上一页按钮:传当前页第一条记录的 ID(即上一页的「最小 ID」应 > 它)
if ($firstId !== null) {
    echo '← 上一页';
}

// 下一页按钮:传当前页最后一条记录的 ID(即下一页的「最大 ID」应 < 它)
if ($lastId !== null && count($results) === $limit) {
    echo '下一页 →';
}
?>

⚠️ 重要注意事项

  • 必须确保 id 字段有索引(如主键或唯一索引),否则 WHERE id > ? 查询将全表扫描,性能急剧下降;
  • 避免混合使用 OFFSET:传统 LIMIT offset, size 在大数据量下效率低下,且无法精准支持“上一页”逻辑;
  • 边界 ID 必须来自当前页真实数据:切勿用计算(如 $firstId - 21),因 ID 不连续;
  • 前端需禁用重复提交:防止用户快速点击导致状态错乱;
  • 考虑添加 created_at 辅助排序:若存在同 ID 冲突(极罕见),可加二级排序保障稳定性,如 ORDER BY id DESC, created_at DESC。

该方案彻底摆脱对 ID 连续性的依赖,即使中间大量删除数据,翻页依然精准、响应迅速,是高并发、大数据量场景下的推荐实践。


# mysql  # php  # 前端  # 大数据  # 并发  # 上一页  # 下一页  # 分页  # 升序  # 当前页  # 更大  # 降序  # 翻页  # 不连续  # 使其 


相关文章: 建站之星多图banner生成与模板自定义指南  如何挑选优质建站一级代理提升网站排名?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  实例解析Array和String方法  如何规划企业建站流程的关键步骤?  建站之星图片链接生成指南:自助建站与智能设计教程  建站主机解析:虚拟主机配置与服务器选择指南  中山网站制作网页,中山新生登记系统登记流程?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  在线制作视频的网站有哪些,电脑如何制作视频短片?  Python多线程使用规范_线程安全解析【教程】  如何快速搭建高效香港服务器网站?  建站OpenVZ教程与优化策略:配置指南与性能提升  如何通过主机屋免费建站教程十分钟搭建网站?  内网网站制作软件,内网的网站如何发布到外网?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  建站之星安装失败:服务器环境不兼容?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  设计网站制作公司有哪些,制作网页教程?  如何通过虚拟主机快速完成网站搭建?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  网站网页制作专业公司,怎样制作自己的网页?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何通过万网虚拟主机快速搭建网站?  家具网站制作软件,家具厂怎么跑业务?  如何通过.red域名打造高辨识度品牌网站?  如何在云主机快速搭建网站站点?  怀化网站制作公司,怀化新生儿上户网上办理流程?  ,sp开头的版面叫什么?  太平洋网站制作公司,网络用语太平洋是什么意思?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  建站之星在线版空间:自助建站+智能模板一键生成方案  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  黑客入侵网站服务器的常见手法有哪些?  中山网站推广排名,中山信息港登录入口?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  css网站制作参考文献有哪些,易聊怎么注册?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  建站之星安装模板失败:服务器环境不兼容?  如何快速生成可下载的建站源码工具?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。