Mysql 对同一列按两次排序

问题描述 投票:0回答:1

我需要设置一个默认订单列,然后可以提供另一个订单列作为参数来适应用户首选项。但是,我设置为默认的列也有可能被用户选择。那么这样的情况下,是否能够成功应用来匹配用户的选择呢?这是例子:

SELECT id, name, code, age, create_time FROM data_table
order by create_time asc, create_time desc

这样的话,查询结果会按照‘create_time’列升序还是降序排序?

我想知道这种情况下的实际结果,否则输出将是错误的。其实我在Navicat中测试过,它按预期排序上升,但我不知道为什么。

mysql sql-order-by
1个回答
0
投票

order by 接受任意表达式,而不仅仅是列,行的顺序由最左边的顺序表达式确定,但有差异。不要求一列只能在一个表达式中使用。在您的情况下,它们将按升序排序;仅当比较的两行的 create_time 相等时才会计算降序表达式,在这种情况下没有区别。

如果两行的 create_time 相同,则返回它们的顺序是未定义的,甚至可能因一个查询而异。
我建议始终按列进行足够的排序,以明确确定顺序;在这种情况下,添加额外的 order by 表达式来区分任意两行(例如,如果 id 是唯一标识符)。

© www.soinside.com 2019 - 2024. All rights reserved.