mySQL Switch:如何在SELECT语句中赋予“OR”优先级或重要性以获取默认行

时间:2016-02-09 10:56:54

标签: mysql

是否有简单的方式在mySQL中执行Switch?考虑一下:

SELECT * FROM table WHERE
    a=1 OR
    b=2 OR
    c=3 OR
    d=4 OR
    e=5 OR
    f=6
LIMIT 1;

这将返回随机行,该行匹配OR子句的任何部分。但是,如果a是最重要的列,b是下一个最重要的列,我们如何更改查询以按重要性顺序选择单个行?换句话说,我们需要首先检查a=1是否为真,如果为真则返回,否则请检查b=2,依此类推,直到找到匹配为止。

此类查询的实际用途是设置表,我们希望查看用户或其管理员或其组织是否添加了自定义设置行。如果没有,我们需要选择该国家/地区的默认设置。

我在考虑使用ORDER BY子句返回最重要的行,或者使用冗长的if/else来查找最重要的结果,但我无法弄清楚语法。< / p>

搜索非常困难所以我在SEO的标题中添加了一些关键字。

2 个答案:

答案 0 :(得分:1)

你可以使用CASE,尽管这很快就会变得丑陋。最好将数据规范化,以便更好地查询。

SELECT *
FROM table
WHERE
  CASE WHEN a = 1
    THEN a = 1
  ELSE
    CASE WHEN b = 2
      THEN b = 2
    ELSE
      CASE WHEN c = 3
        THEN c = 3
      END END END
LIMIT 1;

答案 1 :(得分:1)

这里需要的是ORDER BY CASE条款。

像这样:

SELECT * FROM table WHERE
a=1 OR
b=2 OR
c=3 OR
d=4 OR
e=5 OR
f=6
ORDER BY CASE WHEN a=1 THEN 0
 WHEN b=2 THEN 1
 WHEN c=3 THEN 2
 ...
 ELSE 3
END
LIMIT 1;