MySQL:如何对 ORDER BY 子句使用 CASE
P粉463291248
P粉463291248 2023-11-01 17:44:15
0
1
398

我有一个存储过程,它必须在根据输入过滤行后返回一个表。其中两个输入是 sort_columnsort_dir。查询必须在 sort_dir 方向(ASC 或 DESC)中 ORDER BY sort_column

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

  1. SELECT * FROM 表 ORDER BY sort_column sort_dir
  2. SELECT * FROM 表 ORDER BY CASE sort_column 当 'col1' 那么 col1_name WHEN 'col2' THEN col2_name END CASE sort_dir WHEN 'asc' THEN ASC ELSE DESC END

  3. 我以 _ 格式将 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。上述每种情况下它都不同,但始终指向“CASE”部分。这是上面提到的选项 2 的错误

##1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 4 行的 'WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE ' 附近使用的正确语法

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

我在这里做错了什么吗? 除了 CASE 之外还有更好的方法吗?

MySQL版本:5.6

P粉463291248
P粉463291248

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!