如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?
Posted
技术标签:
【中文标题】如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?【英文标题】:How do I return true or false if multiple columns equal a certain value in MySQL query? 【发布时间】:2011-04-15 22:37:55 【问题描述】:我有一个单独的数据库表 (mysql),我在上面运行一个简单的 SELECT。在此表中,我有 3 个字段,每个字段包含 3 个可能的值。在每种情况下,值都是相同的(“无”、“在线”、“物理”)。如果这些字段中的任何一个未设置为“无”,我想在结果中返回别名的真或假值。
返回结果集后,我可以轻松地在 php 中对此进行评估,但为了轻松地对结果进行排序,如果可能的话,我宁愿在 SELECT 中生成真/假。所以目前结果行可能如下所示:
id: 1
trial_type_1: none
trial_type_2: online
trial_type_3: none
在这种情况下,我希望查询返回:
id: 1
trial: True
如果所有的 trial_type 字段都设置为 none,那么它将返回 False 的试验值。任何想法都非常感谢,因为我真的不知道从哪里开始,甚至不知道在网上搜索什么! :)
【问题讨论】:
【参考方案1】:我会在其中使用 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
但是,您也可以将其作为一个简单的逻辑运算来完成 - 这可能更接近您想要的,如下所示:
SELECT id,
(trial_type_1 <> 'none' OR trial_type_2 <> 'none' OR trial_type_3 <> 'none' ) as Trial
from q3773072
正确的方法当然是将多个 trial_types 存储在不同的表中 - 当您开始对字段进行编号时,这是 数据库模式需要更改的线索强>。您还应该设置另一个表来定义试验类型及其定义 - 即它们是否是真正的试验。
我可能会采用后一种方法,因为您很可能会在将来的某个时候添加另一种试用类型,如果您做得不好会很痛苦..
【讨论】:
阿门! “当您开始对字段进行编号时,这表明数据库架构需要更改” Brill,谢谢理查德......在这种情况下,客户有许多产品我需要指示试用访问......目前总共只有 5 个,但是是的,我认为需要一些抽象这里! :)【参考方案2】:这应该可行:
SELECT
id,
NOT (trial_type_1 IS NULL AND trial_type_2 IS NULL AND trial_type_3 IS NULL) AS trial
FROM ...
【讨论】:
假设试用值“none”在数据库中输入为NULL
。【参考方案3】:
你可以使用 CASE:
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
【讨论】:
【参考方案4】:这可能有效:
SELECT id,
(trial_type_1 <> 'none'
OR trial_type_2 <> 'none'
OR trial_type_3 <> 'none') AS some_not_none
FROM ...
【讨论】:
【参考方案5】:您可以使用 MySQL IF
statement:
SELECT
id,
IF (
(trial_type_1 != 'none'
OR trial_type_2 != 'none'
OR trial_type_3 != 'none'
), 1, 0
) AS trial
FROM ...
【讨论】:
以上是关于如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?的主要内容,如果未能解决你的问题,请参考以下文章