sql - 处理给定页面编号的基于值的分页

标签 sql postgresql algorithm pagination

当使用基于值分页时

select * from articles 
where id > @start_value 
limit @page_size

如何计算 @start_value 只给定页码

即:比如说,我有一个网站和 html 页面,其中包含我需要分页的文章列表。但即使要呈现第一页,我也需要以某种方式计算 @start_value。来自用户的输入将是他点击的页面的编号;对于第一页,默认情况下为 1。

  • 鉴于 1,我将如何计算 @start_value

  • 或给定任何随机页面,我仍将如何计算 @start_value

请注意,表的 id 列的值不一定是连续的,即使 id 是自动递增的也是如此。

最佳答案

首先,没有任何排序的分页并不理想。如果不包含和 order by 子句,您无法保证 SQL 将如何对结果进行排序。

您还需要知道页面大小来计算起始值,但给定 @page_num@page_size:@start_value@start_value = @page_num * @page_size; 计算。

这里没有 where 子句,而是有 limit/offset

    select * 
    from articles
    order by id
    limit @page_size
    offset (@page_size * @page_num)

关于sql - 处理给定页面编号的基于值的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54464388/

相关文章:

mysql - 一个字段中的主键和外键

sql - 如何对版本号进行排序,例如 ‘A’ 、 ‘B’ 、 ‘AA’ 、 ‘AB’ 和 ‘AAA’ ?

mysql - 动态枢轴求和和分组依据

postgresql - 如何在 Postgres 表上存储 Go 的当前时间(小时-分钟-秒)?

sql - 内部联接与交叉应用 - 无法绑定(bind)多部分标识符

python - Python/psycopg2 中的优雅主键错误处理

postgresql - 无法使用 repmgr 降级数据库

algorithm - 具有重复项的旋转排序数组中的最小值

java - 在无尽的流中保持和最大频率的数字

algorithm - 为什么在插入 2-3-4 树时节点会 split ?