我有一个时间线,比如在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结合起来吗?或者也许是一个新专栏?我不知道如何解决这个问题。
谢谢!
您应该记录最新的col_date
和col_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)
上创建复合索引,以便快速工作。
ORDER BY 子句接受多个参数
试试这个:
订购者:col_data DESC,col_id DESC
这将按日期排序,然后按 id 排序。
除此之外,您还可以获得 100 条记录,然后过滤这些记录直到获得结果。
是的,您可以按两列排序。
SELECT *
FROM table
WHERE col_id < $col_id
ORDER BY col_date DESC, com_id DESC
LIMIT 0, 25
这个问题在这里已经得到了回答。看一看 - PHP MySQL 按两列排序
为什么不能使用 col_id 来解决问题?
一种可能性是使用另一列 - 就像他们在reddit上所做的那样。如果您转到第一页,然后单击下一步,您将看到 url:?count=25&after=t3_1mr2nk。
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