从 postgres postgres 表上选择查询的结果集中获取 n 行

时间:2021-03-23 04:58:33

标签: sql postgresql pagination get

我正在获取 API 中添加分页,并且需要从选择查询中获取特定的行号。我怎样才能在 postgresql 中实现这一点? 就像 page=2 和 count=10 一样,我想检索第 11-20 行。

select users.id from users, usernotification where usernotification.channel=1 and usernotification.id=users.id;

1 个答案:

答案 0 :(得分:0)

Postgres 没有行号的固有概念。可能会创建真正的行号,但除非您存储它们,否则它将基于逐个查询。也就是说,以下内容只需要跟踪要显示的页码。它还具有处理向前和向后滚动的优势。

注意:我已将您的查询修改为使用标准 ANSI 连接语法。你应该采用它。更容易看到实际需要的东西,而且不容易出错。

   select u.id 
     from users u
     join usernotification un 
       on un.id = u.id and un.channel=1
    order by u.id 
   offset (&page_num-1) * 10 limit 10; 

如果其他用户删除以前显示的行,则可能会出现“丢失”行的缺点。如果是这样,您将“错过”等于删除的行数的后续行数。例如,在显示第 1-10 行时,另一个用户删除了其中的 5 个,您的第 2 页将显示原始行 15-24,而不是 11-20。
Demo。由于 db<>fiddle 不支持分页,它将使用先验知识页面控制值“向前翻页”。还添加了几个额外的列。

相关问题