在我的 MySQL 数据库中,我有一个表存储文章和类别的关联,列是 category_id 和 product_id。因此,属于类别 #3 和 #6 的文章 #5 具有行 (3,5)(6,5)。
现在我需要获取类别 1 和 6 中的文章数。使用 SELECT count(category_id) from s_a_c where category_id=1
可以轻松获取一个类别中的文章数但是我如何扩展这个查询来检查两只猫呢?
最佳答案
这是一种使用两个连接的方法(一个连接用于您要搜索的每个类别):
SELECT COUNT(1)
FROM articles
INNER JOIN s_a_c c1 ON articles.product_id = c1.product_id
AND c1.category_id = 1
INNER JOIN s_a_c c2 ON articles.product_id = c2.product_id
AND c2.category_id = 6
这是另一种使用 HAVING
子句的方法。派生表从 s_a_c
中提取类别 1 和类别 6 的所有产品,两者都有 (COUNT(1) = 2
)。这利用了 {product_id, category_id}
将是唯一的这一事实:
SELECT COUNT(1)
FROM
(
SELECT product_id
FROM s_a_c
WHERE category_id IN (1,6)
GROUP BY product_id
HAVING COUNT(1) = 2
) x
关于php - SQL : get count of articles in two categories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779924/