sql - 在给定页面数量的情况下处理基于值的分页
问题描述
使用基于值的分页时
select * from articles
where id > @start_value
limit @page_size
我怎样才能计算@start_value
给定的页码?
即:比如说,我有一个网站和 html 页面,其中包含我需要分页的文章列表。但即使要渲染第一页,我也需要以@start_value
某种方式计算。来自用户的输入将是他点击的页面的编号;对于第一页,它是 1 - 默认情况下。
鉴于1,我将如何计算
@start_value
?或给定任何随机页面,我仍将如何计算
@start_value
?
请注意,id
表的列的值不一定是连续的,即使id
是自动递增的。
解决方案
您不需要“where id > ...”部分。实现这一点的正确方法是使用limit @page_size offset @offset
构造。这样您就不必担心间隙。要根据页码计算偏移量,只需乘以 page_size * page_number。另一个重要的事情是,如果您想始终获得相同的结果,您应该订购您的寄存器。如果您不信任 ID,则可以按日期或其他字段排序。所以:
select * from articles
order by date
limit @page_size
offset (@page_size * (@page_num-1))
注意:我使用 (@page_num-1) 从第 1 页的 0 偏移量开始。
推荐阅读
- angular - Angular ngx 为语言环境翻译缺失的语言环境数据
- odoo - 如何在odoo中使用“相关”
- visual-studio-code - VSCode 在工作区中保存时运行命令
- java - 本地 mongodb 和 mongodb 图集的不同响应
- flutter - 用于空值的空检查运算符的连续错误
- node.js - Nuxt.js 多租户 (SaaS) 系统动态“静态”文件夹更改
- tailwind-css - 使用 Alpine Js 的选项卡式内容 - 首次访问的链接
- php - Limit the image size on laravel request post
- wordpress - WordPress:在主页上只显示标题?
- python - 从较大的数组生成 2 个唯一数组