2

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来做?

4

4 回答 4

2
SELECT field1 IN (1,2,5) + field2 IN (1,2,5) + ...

但是,这在某种程度上表明设计不佳。也许如果您可以提供数据背后语义含义的更多详细信息,我们可以提出更好的替代方案?

于 2012-07-02T08:22:37.580 回答
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提出了一个很好的观点。您能否分享更多关于您的目标的信息,以便找到更好的解决方案?

于 2012-07-02T08:25:26.127 回答
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
于 2012-07-02T08:28:59.493 回答
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
于 2012-07-02T08:35:18.833 回答