2013-10-21 43 views
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條,也不知道爲什麼,因爲其餘的都沒有問題。似乎評論的數量是一式四份,並在評論和視圖的第一行中重現。

回答

1

你得到你的加入笛卡爾乘積:

1條* 4次* 3條評論= 12

不知道爲什麼你得到24,或許你有相同的ID爲2篇第一行。

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 
+0

同上的應對措施:我不能使用DISTINCT,否則我將只得到1對所有結果......我希望所有) – Th3lmuu90

+0

嘗試其他版本:) – mucio

+0

它的工作完美!謝謝!這是一個很好的長查詢hehehe – Th3lmuu90