Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL order by子句中的连字符_Mysql_Sql - Fatal编程技术网

MySQL order by子句中的连字符

MySQL order by子句中的连字符,mysql,sql,Mysql,Sql,我有一个MySQL查询,这行代码 ORDER BY -order_line_groups.sequence DESC, order_line_groups.id; 我想在订单发出后找出连字符的用途。我试过在有和没有它的情况下执行,但似乎没有什么不同。我也用解释的方式看了一下,没有发现什么不同 我找不到任何MySQL文档提供帮助。我确实发现: 如果在下面列出连字符,请将ORDER BY与包含关键字列名以外的术语的表达式一起使用: 它没有提供多少信息。有人能解释一下这是怎么回事,或者给我指一些文档

我有一个MySQL查询,这行代码

ORDER BY -order_line_groups.sequence DESC, order_line_groups.id;
我想在订单发出后找出连字符的用途。我试过在有和没有它的情况下执行,但似乎没有什么不同。我也用解释的方式看了一下,没有发现什么不同

我找不到任何MySQL文档提供帮助。我确实发现: 如果在下面列出连字符,请将ORDER BY与包含关键字列名以外的术语的表达式一起使用:

它没有提供多少信息。有人能解释一下这是怎么回事,或者给我指一些文档吗


谢谢。

您正在对列“sequence”的值求反,并按顺序使用它

order by -(number)

通过对数字求反排序。

您正在对列“sequence”的值求反,并按顺序使用它

order by -(number)

在Mysql中,几乎可以使用任何表达式来确定数据的排序方式。如果执行以下示例:

order by (order_line_groups.sequence*order_line_groups.id)
它将首先计算序列*id的值。然后,它将使用这些计算值对表进行排序

将连字符添加到要排序的列基本上就是这样做的

order by (order_line_groups.sequence*-1)
基本上,您将按降序排序

但是,实际上,您将该表达式按降序排序

order by (order_line_groups.sequence*-1) DESC
它将采用降序排序并将其反转,这样您就有了升序排序


我建议您删除连字符并将DESC切换为ASC,这样就不会让其他人感到困惑。

在Mysql中,您几乎可以使用任何表达式来确定数据的排序方式。如果执行以下示例:

order by (order_line_groups.sequence*order_line_groups.id)
它将首先计算序列*id的值。然后,它将使用这些计算值对表进行排序

将连字符添加到要排序的列基本上就是这样做的

order by (order_line_groups.sequence*-1)
基本上,您将按降序排序

但是,实际上,您将该表达式按降序排序

order by (order_line_groups.sequence*-1) DESC
它将采用降序排序并将其反转,这样您就有了升序排序


我建议您删除连字符并将DESC切换到ASC,这样就不会让其他人感到困惑。

答案在问题中:

我确实发现:在您下面列出的连字符处,使用带有表达式的ORDER BY

这里的关键字是表达式。可以在ORDERBY子句中使用表达式

是一个算术表达式,连字符不是连字符而是负号;一元负号数学运算符

它是如何工作的? 关于结果,它的工作如预期:

如果列order\u line\u groups.sequence的类型是a或a,它们也在内部存储为数字,那么减号会反转返回行的顺序。该条款等同于

  ORDER BY order_line_groups.sequence ASC
如果列的类型是a,那么MySQL将尝试将列的类型转换为数字,因为减法是一种算术运算,并且没有为字符串定义减法。当MySQL将字符串转换为数字时,它会在非数字的第一个字符上停止。根据存储在列顺序_line _groups.sequence中的数据,其字符串值的或多或少将转换为数字0

关于速度,正如问题中提供的文档页面所解释的,MySQL不能使用索引来解析ORDER BY。这使得查询速度变慢

结论
使用ORDER BY-ORDER\u line\u groups.sequence使查询速度变慢。此外,当列序列的类型为字符串类型时,它不能提供对结果集进行排序的好方法。

答案在问题中:

我确实发现:在您下面列出的连字符处,使用带有表达式的ORDER BY

这里的关键字是表达式。可以在ORDERBY子句中使用表达式

是一个算术表达式,连字符不是连字符而是负号;一元负号数学运算符

它是如何工作的? 关于结果,它的工作如预期:

如果列order\u line\u groups.sequence的类型是a或a,它们也在内部存储为数字,那么减号会反转返回行的顺序。该条款等同于

  ORDER BY order_line_groups.sequence ASC
如果列的类型是a,那么MySQL将尝试将列的类型转换为数字,因为减法是一种算术运算,并且没有为字符串定义减法。当MySQL将字符串转换为数字时,它会在非数字的第一个字符上停止。根据存储在列顺序_line _groups.sequence中的数据,其字符串值的或多或少将转换为数字0

关于速度,正如问题中提供的文档页面所解释的,MySQL不能使用索引来解析ORDER BY。这使得查询速度变慢

结论
使用ORDER BY-ORDER\u line\u groups.sequence使查询速度变慢。此外,当列序列的类型为字符串类型时,它不能提供对结果集进行排序的好方法。

@Rahul如果这是一个输入错误,它将不会被执行。@Rahul如果这是一个输入错误,它将不会被执行。。