【问题标题】:How do I return true or false if multiple columns equal a certain value in MySQL query?如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?
【发布时间】: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 的试验值。任何想法都非常感谢,因为我真的不知道从哪里开始,甚至不知道在网上搜索什么! :)

【问题讨论】:

    标签: mysql select subquery


    【解决方案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 ...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-05
          • 1970-01-01
          • 2014-07-12
          • 2015-10-11
          • 2012-10-04
          • 1970-01-01
          • 2022-11-29
          • 1970-01-01
          相关资源
          最近更新 更多