首页 > 解决方案 > 在给定页面数量的情况下处理基于值的分页

问题描述

使用基于值的分页时

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

我怎样才能计算@start_value 给定的页码

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

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

标签: sqlpostgresqlalgorithmpagination

解决方案


您不需要“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 偏移量开始。


推荐阅读