Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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:如何使用ORDERBY子句的用例_Mysql - Fatal编程技术网

MySQL:如何使用ORDERBY子句的用例

MySQL:如何使用ORDERBY子句的用例,mysql,Mysql,我有一个存储过程,它必须在根据输入筛选行之后返回一个表。其中两个输入是sort_column和sort_dir。查询必须按sort\u directionASC或DESC中的sort\u列排序 我尝试过以下问题,但没有成功。以下查询已简化为仅包含相关条款。其他过滤器工作正常,没有问题 从表顺序中选择*按排序\列排序\目录 从表“按案例排序”列中选择* 当“col1”时,则为col1\u名称 当'col2'时,则col2_名称结束 “asc”时的案例排序\u dir然后是asc 其他说明结束 我以

我有一个存储过程,它必须在根据输入筛选行之后返回一个表。其中两个输入是sort_column和sort_dir。查询必须按sort\u directionASC或DESC中的sort\u列排序

我尝试过以下问题,但没有成功。以下查询已简化为仅包含相关条款。其他过滤器工作正常,没有问题

从表顺序中选择*按排序\列排序\目录 从表“按案例排序”列中选择* 当“col1”时,则为col1\u名称 当'col2'时,则col2_名称结束 “asc”时的案例排序\u dir然后是asc 其他说明结束

我以uu格式将2个输入连接到1,并尝试了以下方法:

SELECT * FROM table ORDER BY CASE sort_input
  WHEN 'col1_asc' THEN col1_name ASC
  WHEN 'col1_desc' THEN col1_name DESC
  WHEN 'col2_asc' THEN col2_name ASC
  WHEN 'col2_desc' THEN col2_name DESC END
我总是收到错误1064。上述情况各不相同,但始终指向“案例”部分。这是上面提到的选项2的错误

1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第4行的“WHEN”WHEN“col1”然后col1\u name END CASE“asc”WHEN“desc”然后desc ELSE”附近使用的正确语法

问题似乎不是列名。排序方向不起作用。如果我在没有“ASC”和“DESC”部件的情况下尝试上述每个选项,则没有问题

我做错什么了吗? 除了这个案子,还有更好的办法吗


MySQL版本:5.6

最好的方法是多个案例:

这可能看起来很冗长。但是,请记住,CASE是一个返回单个值的表达式。因此,不能将ASC和DESC作为THEN的一部分

数据类型问题也很重要。SQL编译器决定大小写表达式的单一类型。当列的类型不同时,这可能会导致意外问题


最简单的解决方案是只使用多个大小写表达式。

请添加错误消息,而不仅仅是一个部分简单地按排序列排序有什么问题?你不需要任何案例陈述。但它将需要完整的错误消息在附近。。。。“我已编辑该问题以包含完整的错误消息。”。请检查一下。谢谢。@Thilo我已经编辑了问题以包含完整的错误消息。当我使用第一个选项时,它根本不会排序。谢谢,这很有效!但我很好奇,当其余3个CASE语句的计算结果为false并且没有执行时,查询结果会不会像ASC,DESC,col2_name ASC,DESC那样?这适用于sort_输入为col2_asc时。此外,您认为我如何添加默认列以进行排序?@javaGirl243。您可以将其添加为最终键。逐案订购。,案例defaultcol。此外,case表达式返回NULL,而不是没有值,因此语法很好。
ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC,
         (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC,
         (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC,
         (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,