【问题标题】:mysql order by timestamp desc with limit range not workingmysql 按时间戳顺序排序,限制范围不起作用
【发布时间】:2013-02-18 12:28:42
【问题描述】:

我的 mysql 表和其他字段有一个时间戳字段,我在其中存储 unix 时间戳(例如 13076829212)。我想发出一个 ajax 请求,它将获取按时间戳降序排列的新添加的行(获取最新的),所以我发送最后一个行号来触发这样的查询

select id, name from tablename order by timestamp desc limit 30, 125273733849448

我想从获取的最后一个行号开始获取最近序列中的所有行。

上面的查询正在做的是获取随机记录。我知道我的查询逻辑有问题,请帮忙。谢谢。

【问题讨论】:

  • 你的想法是什么?当您使用限制 x,y 时,x 是起点,y 是将显示多少条记录。所以这个查询实际上会跳过前 30 个结果(使用 DESC 顺序)。这是可取的吗?
  • 的想法是获取在获取最后一个结果集之后添加的所有行。这就是为什么 y 是一个很大的数字来显示所有记录

标签: mysql sql-order-by limit


【解决方案1】:

讨论后更新答案:

现在我更好地理解了这个问题,我认为你应该使用:

SELECT id, name, timestamp FROM tablename WHERE timestamp > [saved timestamp] ORDER BY timestamp DESC

[saved timestamp] 将替换为初始查询中的最新时间戳。

如果初始查询也使用ORDER BY timestamp DESC,您将知道最新的时间戳始终位于第一行,因此可以轻松保存。


原答案:

如果我理解正确,30 将是您获取的最后一行的 id,并且 id 正在递增。然后应该这样做:

SELECT id, name FROM tablename WHERE id > 30 ORDER BY timestamp DESC

【讨论】:

  • 实际上 30 是最后一行的编号,我的意思是第 30 是最后一行。我应该使用最后一个 id 而不是按行数来做吗?我想要做的是使用长轮询获取新添加的行
  • 如果我应该使用最后一个 id,这会引发一个新问题,因为最初生成列表的第一个查询也是按降序排列的,所以我如何能够在结果集中获取最后一个 id循环。我应该使用 max(id) 吗?
  • 也许你可以保存最后一个时间戳?
  • 但是再次存储最后一个时间戳,当我遍历初始结果时,我将不得不搜索最高时间戳值。我可以触发两个查询吗,一个用于循环,一个用于获取最高时间戳或 id 值(使用最大值),然后发送该值并在长轮询时使用您建议的查询。
  • 如果您在初始查询中按时间戳排序,那么您将知道最高时间戳值在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多