【发布时间】:2017-08-24 07:09:07
【问题描述】:
我想在按 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 |
+--------------------+
这是 cmets 中建议的 SQLFiddle:http://sqlfiddle.com/#!9/8b2975/1
【问题讨论】:
-
顺便说一句,这是一个内部连接
-
感谢您的反馈,我创建了一个 SQLFiddle 并调整了查询。
-
@Elektropepi,您的预期结果是什么?
-
你可以那样做吗?正如您所说的子查询: SELECT COUNT(DISTINCT id) FROM (SELECT a.id, a.name 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)x;
标签: php mysql sql database mysqli