【发布时间】:2019-11-22 04:39:43
【问题描述】:
我有这张桌子
users(
id uuid,
cpf string,
name string,
email string,
admin boolean
);
索引如下:cpf、name、admin。
当我第一次从 API 加载这些数据时,它将由管理员排序(管理员用户将位于顶部)。但是,由于我使用的是键集分页,所以我在数据集中查找最后一个 id 并再次查询(它有一个 X,它是动态的):
SELECT id,
name,
cpf,
email,
Coalesce(admin, '0') as admin
FROM
users
WHERE
cpf >= '' (empty for the first query, then it would be the last one in the first data set)
AND (
name like 'X%'
OR
email like 'X%'
)
ORDER BY
X (admin, name, cpf)
ASC (or desc, depending on what was chosen)
LIMIT
X
所以这里我有我的第一个数据集,加载正常,但是当我改变页面时,它会寻找比实际更大的 cpfs,它们不是实际的下一页。我将如何解决这个问题?考虑到用户可以选择是否订购:admin、name 和 cpf?订单的同一列需要是最后一行的行吗?如果我由管理员订购,这将如何工作,因为它是一个布尔值?
【问题讨论】:
标签: database postgresql pagination