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

时间:2013-09-20 12:48:27

标签: php mysql

我有一种时间表,例如在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结合起来吗?或者可能是新专栏?我不知道如何解决这个问题。

谢谢!

5 个答案:

答案 0 :(得分:1)

您应该记录最新的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)上创建一个复合索引,以便快速工作。

答案 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