sql—在分页时获取所有页的第一行(限制/偏移)

xmjla07d  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(311)

我有一个条目表(基本上是单词),可以按字母顺序排序。我已经知道了总页数,所以我可以显示 1 2 3 ... 19 20 使用onclick处理程序翻转到新页面。如果一个特定页面的结果已经被加载,它将简单地显示它,否则一个新的sql请求将发出一个offset和limit。
现在,当用户将鼠标悬停在“3”页的链接上时,最好有一个工具提示来显示每个页面上的第一个条目。我知道我可以在mouseover上发出一个请求,但是在第一个查询中就可以得到这个列表了吗?
表格单词示例:

+-ID-+----Word---+
+  1 + ability   +
+  2 + able      +
+  3 + about     +
+  4 + above     +
+  5 + accept    +
+  6 + according +
+  7 + account   +
+----+-----------+

示例初始查询(很明显,在实际查询中,limit 2类似于limit 50) SELECT * FROM words ORDER BY word ASC LIMIT 2 OFFSET 0 进一步查询示例(例如,如果用户单击“3”页): SELECT * FROM words ORDER BY word ASC LIMIT 2 OFFSET 4 期望结果:
我希望有一个初始查询,返回ability和able(显然),然后还返回about(第2页的第一项)、accept(第3页的第一项)和account(第4页的第一项)。同样,我确信在mouseover或类似的东西上使用事件处理程序会很容易,或者在两个后续查询中也不会太难,但是如果可能的话,我希望在一个查询中这样做。如果“其他页面中的第一个”项目的名称不同,那就最好了,但我想这也会有不同的管理方式。初始查询将始终与 OFFSET 0 (即用户不能从第12页开始)。
目前在postgresql版本12.1上

krcsximq

krcsximq1#

如果需要一个返回第n行的查询,可以使用 row_number() 和模运算:

select w.*
from (select w.*, row_number() over (order by word) as seqnum
      from words w
     ) w
where w.seqnum % 50 = 1;

你也许可以使用 id ,如果是连续的,则为无间隙,以1开头,表示单词的顺序。

相关问题