MySQL 偏移量/按日期/限制排序


MySQL offset/order by date/limit

我有一个时间线,比如在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_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)上创建复合索引,以便快速工作。

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