我有一种时间表,例如在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来获取先前的更新({{1 }})
但我需要按日期排序所有内容。但是我不能使用col_id来收集新的/以前的更新。所以我可以使用日期,但是如果有多个列具有完全相同的时间戳,并且25限制将其切换到中间的某个位置,则我无法使用WHERE col_id < $col_id
,因为我会错过更新。
我可以使用WHERE col_date > $col_date
,但是我需要忽略当前版本的新版本。我还可以想象一下,有超过25个更新具有相同时间戳的情况,然后我将无处可去。
我有什么方法可以将日期和col_id结合起来吗?或者可能是新专栏?我不知道如何解决这个问题。
谢谢!
答案 0 :(得分:1)
您应该记录最新的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)
上创建一个复合索引,以便快速工作。
答案 1 :(得分:0)
ORDER BY子句接受多个参数
试试这个:
ORDER BY col_data DESC,col_id DESC
这将按日期排序,然后按ID排序。
除此之外,您还可以获得100条记录,然后只过滤这些记录,直到获得结果。
答案 2 :(得分:0)
是的,您可以按两列排序。
SELECT *
FROM table
WHERE col_id < $col_id
ORDER BY col_date DESC, com_id DESC
LIMIT 0, 25
这个问题已在这里得到解答。看看 - PHP MySQL Order by Two Columns
答案 3 :(得分:0)
为什么不能使用col_id来解决问题?
一种可能性是使用另一列 - 与reddit上的相同。如果您转到第一页,然后点击下一步,则会看到以下网址:?= = 3>&lt; = = t3_1mr2nk 。
答案 4 :(得分: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