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

Php 如何测试8个字段中只有1个字段等于1,php,mysql,Php,Mysql,我有一个MySQL表,有8列,每列都是INT(1)默认值0 如何测试8个字段中是否只有一个字段等于1?试试以下方法: where 1 = (field1 = 1) + (field2 = 1) + ... 这是基于MySQL中的每个条件都被转换成1或0。如果添加的所有条件都是1,则表示只有一个条件是1(或true)。这将起作用: SELECT field1 + field2 + field3 + field4 + field5 + field6 + field7 + field8 = 1

我有一个MySQL表,有8列,每列都是
INT(1)默认值0

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

试试以下方法:

where 1 = (field1 = 1) + (field2 = 1) + ...
这是基于MySQL中的每个条件都被转换成
1
0
。如果添加的所有条件都是
1
,则表示只有一个条件是
1
(或
true
)。

这将起作用:

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;

数据库没有列,表有。@请提供更多信息。数字可以是负数,还是大于1?