Mysql查询问题
例如,如果是 1,2 或 5,如何计为 1
字段1 = 1 字段2= 1 字段3= 5 字段4= 2 字段5=0;字段6=6;
我需要检查这些字段中的任何一个是否为 1、2 或 5,并将它们计为 1 并忽略其余字段。
选择字段1+字段2+字段3+字段4+字段5+字段6;FROM 表 WHERE id=1; // 应该返回 4 (1+1+1+1+0+0)
这可以做到还是我必须用php来做?
Mysql查询问题
例如,如果是 1,2 或 5,如何计为 1
字段1 = 1 字段2= 1 字段3= 5 字段4= 2 字段5=0;字段6=6;
我需要检查这些字段中的任何一个是否为 1、2 或 5,并将它们计为 1 并忽略其余字段。
选择字段1+字段2+字段3+字段4+字段5+字段6;FROM 表 WHERE id=1; // 应该返回 4 (1+1+1+1+0+0)
这可以做到还是我必须用php来做?
SELECT field1 IN (1,2,5) + field2 IN (1,2,5) + ...
但是,这在某种程度上表明设计不佳。也许如果您可以提供数据背后语义含义的更多详细信息,我们可以提出更好的替代方案?
这应该有效:
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提出了一个很好的观点。您能否分享更多关于您的目标的信息,以便找到更好的解决方案?
另一种选择是使用 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
您可以使用搜索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