我希望在按ID分组后计算文章数量(预期:2
),但它目前只返回1
行,因为它会计算GROUP BY之后的匹配项。
article:
+-------+---------+
| id | name |
+-------+---------+
| 1 | Apple |
| 2 | Orange |
| 3 | Peaches|
+-------+---------+
article_category:
+---------------+----------------+
| article_id | category_id |
+---------------+----------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
+---------------+----------------+
这可以在没有子查询且不使用SQL_CALC_FOUND_ROWS
的情况下完成吗? (因为我正在使用API端点,所以我非常受限制)。我唯一的另一个想法是简单地检索所有ID,然后用PHP计算它们。
这是我目前的查询:
SELECT COUNT(DISTINCT a.id) as number_articles
FROM article a
INNER JOIN article_category c ON a.id = c.article_id
WHERE c.category_id IN (1, 2, 3)
GROUP BY a.id;
期望的输出:
+--------------------+
| number_articles |
+--------------------+
| 2 |
+--------------------+
以下是评论中建议的SQLFiddle:http://sqlfiddle.com/#!9/8b2975/1
答案 0 :(得分:1)
根据您现在添加的预期结果。你可以删除GroupBy,它在这里真的没有实现,这应该可行:
select count(distinct a.id)
from article a
INNER JOIN article_category c ON a.id = c.article_id
WHERE c.category_id IN (1, 2, 3)
答案 1 :(得分:1)
尝试以下解决方案。
select count(DISTINCT a.id) as total
from article a
INNER join article_category c on a.id = c.article_id
WHERE category_id in (1,2,3);
结果:
total
2
答案 2 :(得分:0)
只需计算 c.category_id 的值,而不是 a.id
SELECT COUNT(c.category_id) FROM article a INNER JOIN
article_category c ON a.id = c.article_id WHERE c.category_id
IN (1, 2, 3) GROUP BY a.id;
答案 3 :(得分:0)
SELECT COUNT(DISTINCT a.id)
FROM article a
INNER JOIN article_category c ON a.id = c.article_id