如何测试8个字段中只有1个等于1

时间:2012-04-10 02:42:38

标签: php mysql

我有一个包含8列的MySQL表,每列都是INT(1) default 0

如何测试8个字段中只有一个是否等于1?

2 个答案:

答案 0 :(得分:2)

试试这个:

where 1 = (field1 = 1) + (field2 = 1) + ...

这是基于MySQL中的每个条件都变成10。如果所有条件的添加均为1,则表示只有1(或true)。

答案 1 :(得分:0)

这样可行:

SELECT field1 + field2 + field3 + field4 + field5 + field6 + field7 + field8 = 1 
       AS ONLY_ONE

如果和为1,则返回1(TRUE),如果大于1(多于一组)或小于1(无设置),则返回0(FALSE)。

如果您没有严格模式下的表/ db(因此可以使用0和1以外的值),您可以这样做:

SELECT (field1 > 0) + (field2 > 0) + (field3 > 0) ... = 1 AS ONLY_ONE

因为表达式将为true(1),因此如果它为1或更大(设置),则将其添加为1的值。

如果没有默认设置,则可以进一步优化查询:

SELECT COALESCE(field1 > 0, 0) + COALESCE(field2 > 0, 0) + COALESCE(field3 > 0, 0) ... 
= 1 AS ONLY_ONE

因此,覆盖基地的最佳方式是:

SELECT 
COALESCE(field1 > 0, 0) + 
COALESCE(field2 > 0, 0) + 
COALESCE(field3 > 0, 0) +
COALESCE(field4 > 0, 0) +
COALESCE(field5 > 0, 0) +
COALESCE(field6 > 0, 0) +
COALESCE(field7 > 0, 0) +
COALESCE(field8 > 0, 0) +
= 1 AS ONLY_ONE
FROM my_table;