例如我有一个 MySQL 数据库,
ID | 标题 | 购买时间 |
---|---|---|
1 | 标题A | 2023-12-01 |
2 | 标题B | 2023-08-22 |
3 | 标题C | 2023-12-01 |
4 | 标题 D | 2023-08-23 |
5 | 标题 E | 2023-12-01 |
6 | 标题 F | 2023-06-22 |
7 | 标题 G | 2023-12-01 |
8 | 标题 H | 2023-08-02 |
我正在两个方向上构建无限加载。
假设我的初始检索是SELECT * FROM table ORDER BY Purchase_At DESC LIMIT 3
,它返回 ID 1、3 和 5。
如果我想在 ID 1 之前加载任何内容,我可以吗SELECT * FROM table WHERE Purchase_At < '2023-12-01' ORDER BY Purchase_At DESC LIMIT 3
?
反之亦然,在 5 之后加载任何内容,我会吗SELECT * FROM table WHERE Purchase_At > '2023-12-01' ORDER BY Purchase_At DESC LIMIT 3
?
正如您所看到的,我可能会遇到重复的数据,因为具有相同值的多个记录的排序不可靠。我也做不到WHERE ID < 1
,WHERE ID > 5
也做不到。
我无法使用类似LIMIT
或OFFSET
的分页查询,因为在用户查看期间,将添加新记录,这会弄乱分页。
Purchase_At 是用户通过日期选择器输入的收据日期,仅此而已,没有毫秒等...年、月和日就是我所得到的。就我而言,可能有用户在同一天有 10 张收据。如果我每页分页 3 个,我如何确保我的无限加载不会产生重复的数据?
为了让我的问题更容易理解,可以将其视为 Facebook 聊天系统。用户向下滚动以加载新消息,向上滚动以加载旧消息。我怎样才能通过只知道我的排序可以有多个相同的Purchase_At值(仅包含年、月和日)来实现相同的目的。