如果MySQL查询中有多个列等于某个值,如何返回true或false?
我有一个单独的DB表(MySQL),我正在运行一个简单的SELECT。在这个表中,我有3个字段,每个字段包含3个可能的值。在每种情况下,值都是相同的(“无”、“在线”、“物理”)。如果这些字段中的任何一个未设置为“无”,我希望在结果中为别名返回true或false值 在返回结果集后,我可以很容易地在PHP中对此进行评估,但是为了方便地对结果进行排序,如果可能的话,我宁愿在SELECT中生成true/false。因此,目前结果行可能如下所示:如果MySQL查询中有多个列等于某个值,如何返回true或false?,mysql,select,subquery,Mysql,Select,Subquery,我有一个单独的DB表(MySQL),我正在运行一个简单的SELECT。在这个表中,我有3个字段,每个字段包含3个可能的值。在每种情况下,值都是相同的(“无”、“在线”、“物理”)。如果这些字段中的任何一个未设置为“无”,我希望在结果中为别名返回true或false值 在返回结果集后,我可以很容易地在PHP中对此进行评估,但是为了方便地对结果进行排序,如果可能的话,我宁愿在SELECT中生成true/false。因此,目前结果行可能如下所示: id: 1 trial_type_1: none t
id: 1
trial_type_1: none
trial_type_2: online
trial_type_3: none
在这种情况下,我希望查询返回:
id: 1
trial: True
如果所有的试用类型字段都设置为无,那么它将返回一个False的试用值。任何想法都非常感谢,因为我真的不知道从哪里开始,甚至不知道在线搜索什么!:) 这应该有效:
SELECT
id,
NOT (trial_type_1 IS NULL AND trial_type_2 IS NULL AND trial_type_3 IS NULL) AS trial
FROM ...
这可能会奏效:
SELECT id,
(trial_type_1 <> 'none'
OR trial_type_2 <> 'none'
OR trial_type_3 <> 'none') AS some_not_none
FROM ...
选择id,
(试用型\u 1“无”
或试用型\u 2“无”
或试用(类型为“无”)作为某些“无”
从…起
您可以使用MySQL:
您可以使用以下用例:
SELECT ID, CASE WHEN trial_type_1='none' AND trial_type_2='none' AND trial_type_3='none' THEN 'false' ELSE 'true' END
FROM YourTable
我会在这里使用一个case语句,这是一个非常灵活的方法,非常有用
select id,
(CASE WHEN trial_type_1 <> 'none' OR trial_type_2 <> 'none'
OR trial_type_3 <> 'none'
THEN 'True' ELSE 'False' END) as trial
FROM q3773072
选择id,
(当审判类型为“无”或审判类型为“无”时的情况)
或试用型\u 3“无”
然后“真”或“假”结束)作为审判
从q3773072开始
但是,您也可以将其作为一个简单的逻辑操作来完成—这可能更接近您想要的,如下所示:
SELECT id,
(trial_type_1 <> 'none' OR trial_type_2 <> 'none' OR trial_type_3 <> 'none' ) as Trial
from q3773072
选择id,
(试用型\u 1“无”或试用型\u 2“无”或试用型\u 3“无”)作为试用
从q3773072开始
正确的方法当然是将多个试用类型存储在不同的表中-当您开始对字段进行编号时,提示数据库模式需要更改。您还应该设置另一个表来定义试验类型及其定义,即它们是否是真正的试验
我可能会采用后一种方法,因为在将来的某个时候,您很可能会添加另一个试用类型,如果您做得不对,这将是一件痛苦的事情。假设在数据库中输入的试用值“none”为
NULL
。阿门!“当您开始对字段进行编号时,提示数据库模式需要更改”Brill,谢谢Richard。。。在这种情况下,客户有一些产品,我需要指出试用访问。。。目前总共只有5个,但是的,我认为这里需要一些抽象的东西!:)
SELECT id,
(trial_type_1 <> 'none' OR trial_type_2 <> 'none' OR trial_type_3 <> 'none' ) as Trial
from q3773072