如何对按日期排序的更新Feed进行分页

时间:2013-02-18 17:40:09

标签: mysql pagination infinite-scroll

我有一个内容Feed,按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,但Feed可能会在2个查询之间发生变化,将新项目添加到顶部,从而转移整个偏移量。

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

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

2 个答案:

答案 0 :(得分:1)

如果您每天有多个商品,那么您应该已经有了二级排序。如果它是id,那么写下你的where子句:

WHERE date < :last_date OR (date = :last_date AND id < :last_id)

答案 1 :(得分:1)

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

SELECT * FROM [table] WHERE timestamp_field > [last timestamp] ORDER BY timestamp_field DESC