我正在寻找最佳做法,以便为所有News_ID添加三个类别。
-- Table: news_categories +-------------+---------+ | category_id | news_id | +-------------+---------+ | 2 | 2 | | 2 | 3 | | 7 | 3 | | 14 | 2 | | 2 | 4 | | 12 | 3 | | 12 | 2 | +-------------+---------+
到目前为止,这是我的SQL:
SELECT DISTINCT a.news_id FROM news_categories a, news_categories b, news_categories c WHERE a.news_id = b.news_id AND b.news_id = c.news_id AND a.category_id =2 AND b.category_id =7 AND c.category_id =12
查询返回news_id 3这是我想要的,但这是要走的路吗?如果有更多类别加入,性能如何?
答案 0 :(得分:3)
要消除联接,请按news_id分组并计算category_ids。如果类别ID的数量是您要查找的数量,则可以找到它们。
SELECT news_id, COUNT(category_id)
FROM t1_news_categories
WHERE category_id IN (2, 7, 12)
GROUP BY news_id
HAVING COUNT(category_id) = 3
在这里添加一些关于性能的内容,我不确定这与原始查询的速度有多快。但是,一旦你开始在原始查询中添加更多类别(连接),那么我认为这肯定会更快。编码也比根据您要查找的类别动态创建查询更容易。