Mysql查询问题
如果为1,2或5,如何计为1
field1 = 1 field2 = 1 field3 = 5 field4 = 2 字段5 = 0; 字段6 = 6;
我需要检查这些字段中的任何一个是1,2还是5并将它们计为1并忽略其余字段。
SELECT field1 + field2 + field3 + field4 + field5 + field6; FROM表WHERE id = 1; //应该返回4(1 + 1 + 1 + 1 + 0 + 0)
可以这样做,还是我要用php做呢?
答案 0 :(得分:2)
SELECT field1 IN (1,2,5) + field2 IN (1,2,5) + ...
然而,这有点表明设计不佳;也许如果你能提供数据背后语义含义的更多细节,我们可以提出更好的选择吗?
答案 1 :(得分:1)
这应该有效:
select count(field1) + count(field2) + count(field3) + count(field4) + count(field5) + count(field6) as total
from table
where
field1 in(1,2,5)
or field2 in(1,2,5)
or field3 in(1,2,5)
or field4 in(1,2,5)
or field5 in(1,2,5)
or field6 in(1,2,5)
编辑:然而,eggyal非常重要。您能否分享更多有关您的目标的信息,以便找到更好的解决方案?
答案 2 :(得分:1)
另一种选择是使用IF语句,如下所示:
SELECT IF(field1 = 1 or field1 = 2 or field1 = 5, 1, 0)+IF(field2 = 1 or field2 = 2 or field2 = 5, 1, 0)+IF(field3 = 1 or field3 = 2 or field3 = 5, 1, 0)+IF(field4 = 1 or field4 = 2 or field4 = 5, 1, 0)+IF(field5 = 1 or field5 = 2 or field5 = 5, 1, 0)+IF(field6 = 1 or field6 = 2 or field6 = 5, 1, 0) FROM table
答案 3 :(得分:1)
您可以使用搜索的CASE
语句,但正如@eggyal所建议的那样,您的架构中可能存在设计缺陷。修复可以很好地简化您的要求。
SELECT CASE WHEN Field1 IN (1, 2, 5) THEN 1 ELSE 0 END
+ CASE WHEN Field2 IN (1, 2, 5) THEN 1 ELSE 0 END
+ CASE WHEN Field3 IN (1, 2, 5) THEN 1 ELSE 0 END
+ CASE WHEN Field4 IN (1, 2, 5) THEN 1 ELSE 0 END
+ CASE WHEN Field5 IN (1, 2, 5) THEN 1 ELSE 0 END
+ CASE WHEN Field6 IN (1, 2, 5) THEN 1 ELSE 0 END
FROM Table