sql - 如何使用seek pagination获取下一个数据集?

标签 sql database postgresql indexing

我正在尝试在使用键集分页(搜索分页)进行分页时进行排序。但是,其中一个字段不是唯一的,只能是真/假 (0/1)。在键集分页中,您从一个查询中获取最后一个 ID,并将其用于下一页,对吧?我将如何处理这种情况?

我开始于:

select * from foo order by admin desc, name asc limit 3

返回

admin name
1     a
1     b
1     c

然后我应该再做一次查询,只带参数

select * from foo where (admin, name) > ('1', 'c') order by admin desc, name asc limit 3

然而这没有任何返回!

我怎样才能解决这个问题,让它带来?

admin name
0     a
0     d
0     x

下面的数据以获得更好的上下文:

我有这张 table

foo(
 name varchar
 admin varchar(1) (0 or 1)
);

我有这个数据

admin name
1     a
1     b
1     c
0     a
0     d
0     x

当我运行这个查询时

SELECT * from foo 
order by admin desc, name asc

有了这个指标

b-tree(admin desc, name asc)

最佳答案

因为 admin 是数字,你可以使用

WHERE (-admin, name) > (-1, 'c')

如果列中没有 NULL,那应该可以正常工作。

对于字符串形式的键,请查看 this question及其答案。

为避免出现间隙,请确保在 ORDER BYWHERE 子句中包含主键。

关于sql - 如何使用seek pagination获取下一个数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078566/

相关文章:

mysql - 如何在 MySQL 查询计数中引入完整的 24 个月跨度(包括 NULL 值)

sql - 从 Sql Server 查询所有用户定义的类型?

php - 在数据库中插入 Unicode 字符

postgresql - 如何从 Snomed Postgres Sql 数据库中查找关系

sql - Postgresql 获取每组多列的最大值

mysql - TIMESTAMPDIFF 格式转换(小时和分钟)

sql - SSRS 远程错误已启用但不起作用

sql - 使用具有多个投影的聚合函数

mysql - SQL - 表示一元(递归)关系

Android - 从网络更新应用程序中的数据库