如果mysql请求中存在else,则为条件


Condition if else inside mysql request

我想在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/PDO来查询数据库,您只需在PHP中使用条件表达式(而不是在SQL中),并根据if的哪一侧执行来编辑查询。这可能更快。

条件表达式也是一种选择。提到这个问题。

SQL中可以有if-then-else逻辑吗?

我想您正在寻找一个CASE语句。例如,您可以使用case语句为列"is_a_senior"设置不同的值。在本例中,如果年份="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是一个非常强大的命令,它允许您在null检查发现null时有条件地将子查询添加到查询中。