如何在Mysql中反转默认顺序?

如何在Mysql中反转默认顺序?,sql,mysql,sorting,sql-order-by,Sql,Mysql,Sorting,Sql Order By,在Mysql中,当您执行select SQL语句时,会有一个默认顺序。如果不包含排序子句,如何反转默认顺序?只需添加DESC?如果不指定order BY子句,则没有保证订单,因此“默认订单的反向”未定义。我认为指定实际需要的订单会更好。桌子从本质上来说是没有秩序的。它可能只是按照插入行的顺序显示——尽管不能保证它会保持该顺序 很可能,您只想添加以下内容: ORDER BY id DESC …由于大多数情况下,人们使用一个称为“id”的自动递增字段如果您希望数据的顺序一致,则必须使用排序依据,然

在Mysql中,当您执行select SQL语句时,会有一个默认顺序。如果不包含排序子句,如何反转默认顺序?只需添加
DESC

如果不指定order BY子句,则没有保证订单,因此“默认订单的反向”未定义。

我认为指定实际需要的订单会更好。桌子从本质上来说是没有秩序的。它可能只是按照插入行的顺序显示——尽管不能保证它会保持该顺序

很可能,您只想添加以下内容:

ORDER BY id DESC

…由于大多数情况下,人们使用一个称为“id”的自动递增字段如果您希望数据的顺序一致,则必须使用排序依据,然后是要按顺序进行查询的列<代码>ASC是默认值,因此您无需指定它。即:

ORDER BY your_column
…相当于:

ORDER BY your_column ASC
ASC/DESC以每列为基础。例如:

ORDER BY first_column, second_column DESC

…意味着查询将使用
第一列
按升序排列,使用
第二列
按降序排列组合对结果集进行排序。

除非您可以在
order BY
子句中指定列名,否则不能使用
DESC
,您必须使用
LIMIT
技巧才能查看最后几条记录


我认为这并不令人满意。

您可以在结果字段中设置一个计数器,并使用它进行排序:

SELECT *, @counter := @counter + 1 AS 'counter' FROM tableName, (SELECT @counter := 0) r ORDER BY counter DESC

我想它可以按照您的要求工作。

但遗憾的是,表中没有“Id”字段。但是如果没有Id字段或等效字段,顺序是否有意义?我认为插入行的默认顺序是“先插入,后退出”。我想将其更改为“先插入,先出”。如果没有逻辑时间戳或某种增量字段,则您没有足够的信息来确定插入的历史顺序。重复:没有“默认顺序”这样的东西,因此您无法“反转”我需要的顺序与插入行的顺序相反。“先插入,先输出”。@Steven:在我建议使用什么之前,您必须提供数据库中的
描述[此处的表名]
的输出。如果您有一个自动编号主键列-按它排序
ASC
。其次最好是使用datetime数据类型创建一个date_列。同样,
ASC
。是的!!它起作用了!谢谢您对这个问题的回答很好。@Jerry,但这与检索行的顺序正好相反,它与实现顺序没有任何保证的联系,而实现顺序又不能保证是任何特定的东西。如果你想保证订单,它必须在数据中。此外,对于设置和读取变量的查询也没有保证,因此此查询具有未定义的行为。Percona最近的一个5.7版本中,有人查看了这个实现,发现在
case
表达式中使用变量(不是这样)会产生某些可预测的行为。直到。对于那些倾向于用证据来支持所提出主张的人: