1

我正在使用 mysql,我有一个几乎可以完美运行的查询。我有以下三个表:

文章

  • article_id

评论

  • comment_id
  • article_id

看法

  • view_id
  • article_id

我想将所有这些信息放在一个查询中。我想看看每篇文章有多少浏览量和评论量。我今天在一些伟大的人的帮助下成功地制作了一个,但我又被困住了。

SELECT article.id_article,
       COUNT(view.id_article),
       COUNT(comment.id_article) 
FROM article LEFT JOIN view ON article.id_article = view.id_article 
             LEFT JOIN comment ON article.id_article = comment.id_article 
GROUP BY id_article 
ORDER BY id_article

发生的情况是,只有第一行显示错误的结果。而不是 4 条评论和 3 条浏览量,我在两者上都看到了 24 条,不知道为什么,因为其余的都很好。似乎评论的数量是一式四份,并在评论和视图的第一行中复制。

4

1 回答 1

1

您将通过加入获得笛卡尔积:

1 篇文章 * 4 次浏览 * 3 条评论 = 12

不知道为什么你得到 24,可能你有 2 篇第一行 ID 相同的文章。

SELECT article.id_article,
       COUNT(distinct view.id_view),
       COUNT(distinct comment.id_comment) 
FROM article LEFT JOIN view ON article.id_article = view.id_article 
             LEFT JOIN comment ON article.id_article = comment.id_article 
GROUP BY id_article 
ORDER BY id_article

编写此查询的另一种方法是:

   SELECT article.id_article,
          v.n_views,
          c.n_comments
     FROM article 
LEFT JOIN (SELECT article_id,
                  count(*) n_views
             FROM view 
         GROUP BY article_id) v ON article.id_article = v.id_article 
LEFT JOIN (SELECT article_id,
                  count(*) n_comments
             FROM comment 
         GROUP BY article_id) c ON article.id_article = c.id_article 
    GROUP BY id_article 
    ORDER BY id_article
于 2013-10-21T16:58:08.507 回答