【问题标题】:Getting n rows from resultset of select query on a postgres postgres table从 postgres postgres 表上的 select 查询结果集中获取 n 行
【发布时间】:2021-06-19 18:34:08
【问题描述】:

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

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

【问题讨论】:

    标签: sql postgresql pagination get


    【解决方案1】:

    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。由于 dbfiddle 不支持分页,因此它将使用先验知识页面控制值“分页”。还添加了几个额外的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多