我想在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时有条件地将子查询添加到查询中。