0

我有一种时间线,例如在 twitter/facebook 中,我有一个主视图,我需要获取最新的更新(计时器),并且能够获取以前的更新(向下滚动)。我将主视图限制为 25 个更新。

我有这些专栏(更多但不相关)

col_id - auto increment
col_date - timestamp
col_content the content

基本上有这样的查询:

SELECT *
FROM table
WHERE col_id < $col_id
ORDER BY com_id DESC
LIMIT 0, 25

目前,我正在按 col_id 排序,这样我可以发送用于获取最新更新的最高 col_id(例如WHERE col_id > $col_id),并且我有最小的 col_id 来获取以前的更新(WHERE col_id < $col_id

但我需要按日期对所有内容进行排序。但是我不能使用 col_id 来收集新的/以前的更新。所以我可以使用日期,但是如果有多个列具有完全相同的时间戳,并且 25 限制在中间某处削减它,我不能使用WHERE col_date > $col_date,因为我会错过更新。

我可以使用WHERE col_date >= $col_date,但是我需要忽略新的欺骗和当前的欺骗。我还可以想象这样一种情况,即有超过 25 次更新具有相同的时间戳,然后我将一事无成。

有什么方法可以将日期和 col_id 结合起来吗?或者也许是一个新的专栏?我不知道如何解决这个问题。

谢谢!

4

5 回答 5

1

您应该记录 latestcol_datecol_id,并像这样使用它们:

SELECT  *
FROM    mytable
WHERE   (col_date, col_id) < ($latest_col_date, $latest_col_id)
ORDER BY
        col_date DESC, col_id DESC
LIMIT 25

为此创建一个复合索引以(col_date, col_id)使其快速工作。

于 2013-09-20T16:02:52.100 回答
0
SELECT *
FROM table
WHERE col_date <= $col_date AND (col_date < $col_date OR col_id < $col_id)
ORDER BY cold_date DESC, col_id DESC
LIMIT 0, 25
于 2013-09-20T15:48:04.050 回答
0

ORDER BY 子句接受多个参数

尝试这个:

ORDER BY col_data DESC,col_id DESC

这将按日期排序,然后按 id 排序。

除此之外,您还可以获得 100 条记录,然后过滤这些记录,直到获得结果。

于 2013-09-20T12:54:04.530 回答
0

是的,您可以按两列排序。

SELECT *
FROM table
WHERE col_id < $col_id
ORDER BY col_date DESC, com_id DESC
LIMIT 0, 25

这个问题已经在这里得到了回答。看看 - PHP MySQL 按两列排序

于 2013-09-20T12:54:11.493 回答
0

为什么你不能使用 col_id 来解决这个问题?

一种可能性是使用另一列——就像他们在 reddit 上所做的那样。如果您转到第一页,然后单击下一步,您会看到 url: ?count=25& after=t3_1mr2nk

于 2013-09-20T12:57:22.797 回答