如果 Select inside SQL IN statement returns NULL then select ALL

If Select inside SQL IN statement returns NULL then select ALL

我正在尝试缩短我的代码并使其更快。 但是,我对这个声明有点挣扎。 如果未设置值 page_category,我希望它成为 return all 新闻。

page_category 在数据库中设置为 1,2,3,4,每篇新闻文章都有 1 个类别,如下所示。

页面类别

新闻分类

我想获取类别 ID 在 page_category 内的每篇新闻文章。

这是我的声明,只要设置 page_category 就可以正常工作。

"AND n.news_category IN (SELECT page_category FROM pages WHERE page_name = :pagename AND page_deleted IS NULL)";

如果 return 是 NULL,我该如何重写,以便 n.news_category 不算数?

这是我目前的全部陈述:

 $sql = "SELECT n.news_title, n.news_content, n.news_published_dt "
      . "FROM news n "
      . "LEFT JOIN languages l "
      . "ON n.news_lang = l.language_id "
      . "WHERE ((l.language_val = :language) OR (n.news_lang_all IS NOT NULL)) "
      . "AND n.news_deleted IS NULL "
      . "AND n.news_published = 1 "
      . "AND n.news_category IN (SELECT page_category FROM pages WHERE page_name = :pagename AND page_deleted IS NULL)";

假设 page_category 取一个 NULL 值,并且在这种情况下您想要所有行,然后使用 exists 代替:

EXISTS (SELECT 1
        FROM pages p
        WHERE p.page_name = :pagename AND p.page_deleted IS NULL AND
              (p.page_category is null or p.page_cateogry = n.news_category)
       )