13

如何从表中排序值,从插入的时间开始升序。对于这个问题没有特殊的列,比如时间戳或自动增量。

我知道不建议这样做......我仍然想知道如何做到这一点。

正如我从答案中了解到的那样,如果在插入值之前没有添加排序列,例如:时间戳或自动增量,则无法通过插入对它们进行排序。

4

4 回答 4

13

ORDER BY如果查询中没有子句,则无法保证行将以任何特定顺序返回。

考虑一个返回表中所有行的所有列的简单查询。例如:

SELECT * FROM mytable ; 

对于该查询,MySQL 很可能会从表的开头执行全表扫描。因此,这些行很可能会按照它们在物理存储中的顺序返回。

这可能大致对应于插入行的顺序,如果没有删除、没有更新和没有重组,则插入行的空间后来被回收,并重新用于存储新插入的行。

但不能保证这种行为。

要按照插入的顺序返回行,查询必须通过包含一个ORDER BY子句来指定要返回的行的顺序。

对于以“插入顺序”返回的行,这意味着查询需要能够获得该信息,或者能够派生该信息。对于针对单个表的简单查询,这意味着信息需要存储在行中。

于 2012-07-25T18:56:27.587 回答
1

你可以ORDER BY从你的桌子上得到一些东西。如果你没有任何东西可以用来找出你需要的订单,你不能通过它来订购。

于 2012-07-25T18:46:20.767 回答
1

根据表中的数据,您可以按数据的 id 排序 - 如果数据具有单个增量整数以确保 PK 唯一性。除非数据被捕获并记录在表中,否则没有其他方法可以按插入顺序排序。

我不知道 MySQL 中有什么东西会保留您未在表级别指定的记录的额外(元)信息。

于 2012-07-25T18:49:37.687 回答
0

需要有一列来对您的查询进行排序。通常这将是一个插入时间戳,或递增 id/递增键。否则无法保证订单,因为没有记录。

MySQL论坛的相关主题

于 2012-07-25T18:45:41.197 回答