【问题标题】:Mysql limit order by questionMysql按问题限制订单
【发布时间】:2011-01-21 11:21:10
【问题描述】:

我有这个问题:SELECT * FROM mash order by id asc limit 10

但我试图做的是选择最后插入的 10 条记录,但按 id asc 排序。

所以说数据是:13,4,4,5,6,78,4,23,21,1,1,2,3,4,5,65,6,7,3,而“3”是插入的最后一条记录,我怎么能从中选择1,1,2,3,4,5,65,6,7,3

【问题讨论】:

  • 你有没有重新编码插入时间戳的列?
  • 除非您有一列以某种方式存储插入顺序(递增标识符还是时间戳?),否则无法编写此类查询。插入行的顺序不会自动存储在任何地方,因此您不能在不自己存储的情况下要求数据库按该顺序为您提供行。可能看起来如果您不指定顺序,您会按插入顺序取回数据,但这只是一个临时工件,从长远来看不会成立。
  • 是的,我愿意,但我正在对数据做一些减法,所以我需要以特定方式订购它
  • 如果您想使用它来为您编写基于它的查询,您需要告诉我们该广告订单的存储位置!
  • 各位,不要假设上面的数据来自id列(他说select *)。 @benhowdle89,如果您能澄清这一点以消除这种混乱,将会很有帮助。

标签: mysql sql-order-by limit


【解决方案1】:

我认为你能做的最好的是

select * from (select * from mash order by creation desc limit 10) s order by s.id

【讨论】:

  • 两次小修改,这是正确的答案(用存储插入顺序的任何字段替换creation):删除不匹配的左括号,并为派生表指定别名,否则它将无法运行
  • 假设实际上有一个creation 列。
  • 这是正确答案,谢谢!抱歉没有完全解释我的问题!
【解决方案2】:
select * from (select * from mash order by id desc limit 10) order by id

假设 ID 是您单调递增的插入记录(通常是这样)。

【讨论】:

  • 但可能不是。例如,参见多主复制设置。依赖这个属性不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2018-03-04
  • 2013-07-30
  • 1970-01-01
  • 2011-06-16
  • 2022-10-31
  • 1970-01-01
相关资源
最近更新 更多