gpt4 book ai didi

mysql - 带有空值的光标分页(上一个/下一个)

转载 作者:行者123 更新时间:2023-12-04 12:54:13 27 4
gpt4 key购买 nike

我有一个用 MySQL(8.0 版)实现的游标分页,只要没有 null 就可以正常工作。涉及的值(value)。
这是我的示例数据(id 是随机 UUID,date 是日期,time 是时间):

id | date       | time
--------------------------
68 | 2017-10-28 | 22:00:00
d3 | 2017-11-03 | null
dd | 2017-11-03 | 21:45:00
62 | 2017-11-04 | 14:00:00
a1 | 2017-11-04 | 19:40:00
cursor我使用的总是由所有三列组成。
我使用这个查询来获取 下一个 结果(在 cursor 之后):
SELECT * FROM table
WHERE (date > cursor.date)
OR (date = cursor.date AND time > cursor.time)
OR (date = cursor.date AND time = cursor.time AND id > cursor.id)
ORDER BY date ASC, time ASC, id ASC
而这个查询 上一页 结果(在 cursor 之前):
SELECT * FROM table
WHERE (date < cursor.date)
OR (date = cursor.date AND time < cursor.time)
OR (date = cursor.date AND time = cursor.time AND id < cursor.id)
ORDER BY date DESC, time DESC, id DESC
使用 时上一页 查询 cursor [id = dd, date = 2017-11-03, time = 21:45:00]它不会返回带有 id = d3 的行, 因为 timenull ,这不会被 time < cursor.time 选中.
虽然我尝试使用 time < cursor.time OR time IS NULL而不是 time < cursor.time包含带有 null 的行值。这似乎解决了这个特定问题,但随后又产生了一个新问题:当使用 时上一页 查询 cursor [id = d3, date = 2017-11-03, time = null] ,因为现在结果包含提供的游标的行。
我希望有一个简单的解决方案。网络上似乎没有处理 null 的示例或教程。游标分页中的值。
注:对于解决方案,是否 null 无关紧要将在 non-null 之前或之后排序值,只要它是一致的。 (MySQL 的默认顺序是 null < non-null )

最佳答案

向表中添加另一列。让它成为 DATETIME .联合 datetime非NULL时进入;联合 date在某些特定时间为 NULL。然后您的光标有两列可以使用,并且没有空值。
如果您有一个相当新的 MySQL 版本,您可以使用“生成的存储”列,从而避免任何代码更改。
并且一定要有INDEX(datetime, id) .

关于mysql - 带有空值的光标分页(上一个/下一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68971695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com