我正在尝试在使用键集分页(搜索分页)进行分页时进行排序。但是,其中一个字段不是唯一的,只能是真/假 (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 BY
和 WHERE
子句中包含主键。
关于sql - 如何使用seek pagination获取下一个数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59078566/