[英]If Select inside SQL IN statement returns NULL then select ALL
I'm trying to shorten my code and make it faster. 我正在尝试缩短代码并使其更快。 However, I am struggling a bit with this statement. 但是,我对此声明有些挣扎。 I want it to return all news if the value page_category
is not set. 如果未设置值page_category
我希望它返回所有新闻。
page_category
is set in the DB as 1,2,3,4
and each news article has 1 category like below. 在数据库page_category
设置为1,2,3,4
,每则新闻文章都有1个类别,如下所示。
Page Category 页面类别
News Category 新闻分类
I want to fetch each news article that has the category id within page_category
. 我想获取在page_category
中具有类别ID的每则新闻文章。
This is my statement, and it works fine for whenever page_category
is set. 这是我的声明,每当设置page_category
时,它都可以正常工作。
"AND n.news_category IN (SELECT page_category FROM pages WHERE page_name = :pagename AND page_deleted IS NULL)";
How can I rewrite this so that n.news_category
does not count if return is NULL
? 我该如何重写它,以便如果return为NULL
n.news_category
不计数?
This is my whole current statement: 这是我目前的全部声明:
$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)";
Assuming that page_category
takes on a NULL
value and you want all rows in that case, then use exists
instead: 假设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)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.