是否有简单的方式在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的标题中添加了一些关键字。
答案 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;