我正在致力于为 PostgreSQL 数据库实现分页,其中有一个表用于存储我的应用程序的用户。我有一个查询,旨在根据用户的名字和创建时间戳来获取用户的下一页。但是,我遇到了一些困难,希望得到一些指导。
列的类型:userId(字符串并存储 uuidv5)、userForename(字符串)、userCreatedAt(时间戳)
这是我用于获取下一页的查询:只是一个占位符
SELECT "userId", "userForename", "userCreatedAt"
FROM iatropolis."User"
WHERE
LOWER("userForename") > 'aaliyah'
OR (LOWER("userForename") = 'aaliyah' AND
"userCreatedAt" > TIMESTAMP '2024-03-25 14:50:39.481197')
ORDER BY "userForename" ASC, "userCreatedAt" ASC
LIMIT <limit>;
此查询的目标是按字母顺序检索“aaliyah”之后的第一个用户,如果有多个用户具有相同的名字,则选择创建时间戳晚于“2024-03-25 14:50:39.481197”的用户。
但是,我不确定此查询是否正确实现了所需的分页。尽管我测试了它并且它输出了正确的结果,但我不知道从长远来看它是否会按预期运行(不确定我是否遗漏了某些内容)。
我还尝试转到上一页购买创建类似的查询。
SELECT "userId", "userForename", "userCreatedAt"
FROM iatropolis."User"
WHERE
LOWER("userForename") < 'zula'
OR (LOWER("userForename") = 'zula' AND
"userCreatedAt" < TIMESTAMP '2024-03-25 14:51:53.062856')
ORDER BY "userForename" DESC, "userCreatedAt" DESC
LIMIT <limit>;
这是我正在处理的一些升序随机数据:
用户身份 | 用户名 | 用户创建时间 |
---|---|---|
38ee48f9-6d79-5690-9e51-df4b1cc5d428 | 阿丽雅 | 2024-03-25 14:50:39.481197 |
ba2c1a86-280d-573f-ad35-ed1d023e3e5d | 阿丽雅 | 2024-03-25 14:51:35.52505 |
4f40dd7a-8f0f-54e4-bf14-3de3626bde67 | 阿巴盖尔 | 2024-03-25 19:27:10.985665 |
e7b68316-188d-509e-9fd3-7fc780986c71 | 修道院 | 2024-03-25 17:45:43.584704 |
1084f33e-9183-501d-b1af-70d61f1479d7 | 阿比盖尔 | 2024-03-25 19:27:29.720356 |
561e71fd-f04a-54d2-9864-2324e28cdfbd | 阿比盖尔 | 2024-03-25 19:27:35.5478 |
ab5ad018-1866-50a4-8bf6-568f74988d21 | 阿比盖尔 | 2024-03-25 17:46:35.309003 |
596e13f2-e413-5b50-bdfb-9e68f0edf3db | 阿布迪尔 | 2024-03-25 17:47:08.576102 |
d0d5bff9-f782-5451-bda4-e4d4a3e49f04 | 阿布迪尔 | 2024-03-25 14:51:24.257638 |
33a02ded-b354-5a6b-b506-cad3595d19be | 阿卜杜勒 | 2024-03-25 17:46:49.809666 |
6e1f68ff-f799-511e-ba91-83b35349e652 | 阿卜杜勒 | 2024-03-25 14:51:02.533247 |
f67226da-a560-5913-9770-c23499046dc5 | 安倍 | 2024-03-25 14:49:34.342507 |
4e345a84-144d-55e2-a568-ce2064cb91fc | 阿比盖尔 | 2024-03-25 19:26:32.349998 |
ecab4167-8275-5c45-a6ce-5f616edeb60b | 阿比盖尔 | 2024-03-25 19:26:24.406462 |
3689dc88-b57c-572b-90cd-3bd0c4603656 | 阿比盖尔 | 2024-03-25 14:50:41.608976 |
db26cecb-0532-5cd4-b45e-04c14ce48b97 | 阿比盖尔 | 2024-03-25 19:26:54.081197 |
03d9e144-ba2e-5d08-b8bc-abaa42b59848 | 艾布纳 | 2024-03-25 17:47:12.313267 |
e7d3fd8b-9187-5e78-8178-93eef85c3edc | 艾布纳 | 2024-03-25 19:27:35.016205 |
3a0c5db0-a19b-57b2-be99-6c0e0d33fb4c | 阿达达FN | 2024-03-22 11:33:03.466138 |
达达509-45b3-58e8-920f-2441395af0f8 | 阿达尔贝托 | 2024-03-25 17:46:31.150524 |
dd3781a8-45ae-5ecb-9d5d-b4230347b0d8 | 阿达琳 | 2024-03-25 17:46:05.821796 |
c2122ddb-fd31-59ea-b5db-3e8696f0a2fc | 亚当 | 2024-03-25 14:51:06.880816 |
19ac3589-47ac-53ba-8e8c-c1537babbe97 | 艾迪 | 2024-03-25 17:47:04.303399 |
c61c8d3a-02b7-5db3-8b84-dba2fbf522b8 | 艾迪 | 2024-03-25 17:46:35.627732 |
6800cc09-113a-5383-a9ec-463bfeb1f3aa | 艾迪生 | 2024-03-25 17:46:24.314788 |
这是我正在处理的一些降序随机数据:
用户身份 | 用户名 | 用户创建时间 |
---|---|---|
d64ce86e-1bf4-56d8-86dc-e0ffd9bae972 | 祖拉 | 2024-03-25 14:51:53.062856 |
e6f98b6c-ae16-58e9-ba3a-979dac63058d | 佐拉 | 2024-03-25 17:46:15.697886 |
951b1493-0f86-5741-8b3d-5b7db7466f25 | 佐拉 | 2024-03-25 14:51:38.315643 |
a2c4455e-5333-57ea-9e7e-6a8ca03a7cf4 | 齐塔 | 2024-03-25 19:26:44.119388 |
d00c4951-de6a-5290-b956-13bf3b3e11eb | 齐塔 | 2024-03-25 14:51:28.445206 |
390b6dae-b47e-57d7-8a7f-10a002d9b3a3 | 锡安 | 2024-03-25 14:50:18.578468 |
6f6371a0-b5bd-5839-aed2-81e8b8e0bff7 | 泽塔 | 2024-03-25 19:27:22.998847 |
4750df40-ffda-55e2-b26b-7c0c2ecf87e5 | 泽塔 | 2024-03-25 19:26:01.682206 |
14d137e7-83aa-5463-b47e-1a2376b53376 | 泽尔玛 | 2024-03-25 14:50:15.690687 |
0defcb46-486c-5273-9c81-e553500de614 | 泽尔玛 | 2024-03-25 14:49:32.577772 |
1a28a48b-bc3b-5f84-bbae-1ac0839bf311 | 撒迦利亚书 | 2024-03-25 19:26:04.410123 |
574bf44e-2604-5ff1-95a9-164287d3c880 | 赞恩 | 2024-03-25 19:27:15.455109 |
e7b0e413-2eff-5240-8c18-321664a42416 | 梭鲈 | 2024-03-25 19:26:45.864325 |
2a737734-2c45-54c0-b911-315c8d333884 | 扎卡里 | 2024-03-25 14:50:34.264419 |
782ddfaa-df67-50e3-841d-fa21b525e75c | 扎克里 | 2024-03-25 17:47:17.542445 |
d24c75f2-7152-50aa-96ef-3a2d3847f1d3 | 扎卡里 | 2024-03-25 17:46:58.029806 |
c2d6d8c5-3891-57fb-bbea-57e22cb51da4 | 扎克 | 2024-03-25 17:46:27.203011 |
3333d2de-8028-5f00-8e4c-db821e8fe1a5 | 扎卡里 | 2024-03-25 17:46:25.890929 |
f11dfc68-78f1-5290-b203-9e04449c0538 | 扎卡里 | 2024-03-25 14:50:27.447767 |
d88c05bc-5fe4-5597-94b5-ca29c99a2df4 | 撒迦利亚 | 2024-03-25 17:46:52.98815 |
cf8e2a99-e308-53ae-8908-8c2ff0188143 | 撒迦利亚 | 2024-03-25 14:51:47.465403 |
da1ed730-9965-56c2-9317-e1726f172afc | 伊冯娜 | 2024-03-25 19:26:36.714501 |
97a4213a-5fd5-5d0d-a860-567295ab9a23 | 伊冯娜 | 2024-03-25 14:51:20.7755 |
41ce8c6b-5cca-57b9-a74b-d9fbf8f32ade | 伊薇特 | 2024-03-25 14:50:18.973821 |
9f47693b-bcfd-5e2c-b92f-56aefb79ce03 | 芳子 | 2024-03-25 19:27:33.647082 |
我的问题是,如果有人正确了解 SQL 并使用它多年,他会同意这个键集分页已正确实现吗?另外,就我而言,能够对列进行排序非常重要,这就是我在查询中包含 userForename 的原因。如果我的查询不正确,有人可以告诉我如何正确地执行它们吗?此外,如果有更有效的解决方案可用,我愿意探索替代方法。