【问题标题】:Condition if else inside mysql request条件 if else 在 mysql 请求中
【发布时间】:2016-03-01 02:41:56
【问题描述】:

我想在我的 sql 请求中插入一个 if/else 条件。我该怎么做呢?我在下面尝试过,但它不起作用:

     $QpageManagerGeneralCondition = $OSCOM_PDO->prepare('
         select pmd.pages_html_text,
         pm.page_general_condition
         from :table_pages_manager pm,
         :table_pages_manager_description pmd
          where
         if (pm.customers_group_id = :customers_group_id) else (pm.customers_group_id = 99)

         and pm.page_general_condition = 1
         and pmd.language_id = :language_id
         and pmd.pages_id = pm.pages_id
         limit 1
          ');
     $QpageManagerGeneralCondition->bindInt(':language_id',(int)$_SESSION['languages_id'] );
     $QpageManagerGeneralCondition->bindInt(':customers_group_id',$OSCOM_Customer->getCustomersGroupID() );

     $QpageManagerGeneralCondition->execute();
     $QpageManagerGeneralCondition->value('pages_html_text');

【问题讨论】:

  • 对于这类问题,了解您尝试过什么、预期什么以及实际得到什么会很有帮助。

标签: php mysql


【解决方案1】:

我看到您正在使用 PHP/PDO 来查询您的数据库,您可以只使用 php 中的条件表达式(而不是 SQL)并根据 if 的哪一侧被执行来编辑查询。这可能更快。

条件表达式也是一种选择。为此参考这个问题。

Can you have if-then-else logic in SQL?

【讨论】:

    【解决方案2】:

    我认为您正在寻找 CASE 声明。例如,您可以使用 case 语句为列“is_a_senior”设置不同的值。在此示例中,如果 year = 'SR',则列 'is_a_senior' 的值为 yes。

    SELECT player_name,
       year,
       CASE WHEN year = 'SR' THEN 'yes'
            ELSE 'no' END AS is_a_senior
    FROM benn.college_football_players
    

    https://sqlschool.modeanalytics.com/intermediate/case/

    --

    对于您的具体示例,您可能实际上不需要条件,向您的查询添加默认值可能就足够了。

    ISNULL(pm.customers_group_id, 99)  AS pm.customers_group_id
    

    如果您需要的不仅仅是 ISNULL 检查,还请查看 COALESCE 关键字。 COALESCE 是一个非常强大的命令,如果空检查发现空,您可以有条件地将子查询添加到您的查询中。

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2020-05-31
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多