1

我有一个内容提要,按date DESC, id DESC.
date只是一个日期,而不是日期时间。
id是典型的INT auto_increment

我需要查询n“在特定行之后”的行。(想象一个无限滚动,它需要“获取比当前最后一个项目更旧的项目”)

我会查询where id < :last_id,但问题是 的顺序与 的顺序date不一致_id

我会查询where date < :last_date,但问题是“每天”有超过 1 个项目。我会丢失所有使用相同日期的项目。

我会查询,ORDER BY date DESC, id DESC LIMIT x, n但提要可能会在 2 个查询之间发生变化,将新项目添加到顶部,从而移动整个偏移量。

我目前的 hacky 解决方案是查询where date <= :last_date ORDER BY LIMIT date DESC, id DESC LIMIT n+20然后“手动”丢弃当前最新项目之前的结果。(希望不超过 20 个)。

我确定我不是第一个遇到类似问题的人......有什么想法吗?

4

2 回答 2

1

如果您每天有超过一件物品,那么您应该已经有一个二级排序顺序。如果它是 id,那么像这样编写你的 where 子句:

WHERE date < :last_date OR (date = :last_date AND id < :last_id)
于 2013-02-18T17:43:17.993 回答
1

您可以创建一个存储时间戳的字段(+ on update current_timestamp?)。我假设您不会在一秒钟内获得多个条目。得到结果后,保存最新的时间戳,并在下一个查询中将其传递给脚本。您的查询可能会更改为:

SELECT * FROM [table] WHERE timestamp_field > [last timestamp] ORDER BY timestamp_field DESC
于 2013-02-18T17:46:17.670 回答