postgresql - 如何在 PostgreSQL 中按非不同/非唯一值对排序进行分页?
问题描述
如何通过对可能具有重复值的列进行排序来正确分页?我有一个名为 的表posts
,其中有一列包含某个帖子的点赞数,名为num_likes
,我想按 排序num_likes DESC
。但是下图显示了我遇到的一个问题 - 在两页之间插入的新行会导致重复数据被提取。
这里的这个链接解释了这个问题,并给出了keyset pagination的解决方案,但据我所知,只有在对行进行排序的列是distinct / unique时才有效。如果不是这种情况,我该怎么做?
解决方案
您可以通过向其添加主键轻松地使排序键唯一。
您不必向用户显示主键,只需在内部使用它来区分“相等”的行。
对于查询和索引,您可以利用 PostgreSQL 的比较能力,如下所示:(num_likes, id) >= (4, 325698)
.
推荐阅读
- c - 我可以在 C 中使用三元运算符为字符串赋值吗?
- jquery - Laravel 5 WebPack JQuery - $ 未定义
- php - ews php - 推送通知与流式通知
- java - 将所有库版本移动到多模块 gradle 项目中的根 gradle 文件
- c - 编写一个循环程序,从标准输入读取字符并将其十进制值写入标准输出,每行一个,直到出现 EOF
- javascript - React JS:检查电子邮件 ID 是否有效以及逗号分隔的电子邮件 ID
- git - 如何从我一直合并到它的分支中获取更改?
- postgresql - 为什么这个 UPDATE ... RETURNING 返回 null 而不是 true?
- rxjs - 仅从 Store 中选择最近的值
- sql - 如何进行这个 sql 查询?子查询返回超过 1 个值