如果 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)
)
我正在尝试缩短我的代码并使其更快。
但是,我对这个声明有点挣扎。
如果未设置值 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)
)