我有兩張表,博客和文章,以及他們之間的預期關係。帖子可以發佈或起草。我想選擇所有發佈和發佈帖子數量的博客。我該怎麼做?如何從SQL中的各個連接到同一個表中計數?
我嘗試此查詢:
SELECT blogs.*,
COUNT(published_posts.*) AS published_post_count,
COUNT(draft_posts.*) AS draft_post_count
FROM blogs
JOIN posts AS published_posts ON published_posts.blog_id=blogs.id AND
published_posts.state = "published"
JOIN posts AS draft_posts ON draft_posts.blog_id=blogs.id AND
draft_posts.state = "draft"
GROUP BY blogs.id
但我結束了兩個published_post_count和draft_post_count和犯錯兩個相同的號碼。
然後我變得絕望和特里:
SELECT blogs.*,
COUNT(published_posts.*) AS published_post_count,
COUNT(draft_posts.*) AS draft_post_count
FROM blogs
JOIN (SELECT * FROM posts WHERE posts.state="published") AS published_posts
ON published_posts.blog_id=blogs.id
JOIN (SELECT * FROM posts WHERE posts.state="draft") AS draft_posts
ON draft_posts.blog_id=blogs.id
GROUP BY blogs.id
但在這兩種情況下,我有同樣的錯誤的結果。
這樣做的正確方法是什麼?
謝謝。
這個工程。但是,這與運行很多查詢不一樣嗎? (N + 1) – Pablo 2012-04-06 19:35:36
否。因爲它是依賴於外部查詢的子查詢。做COUNT(*)並不是那麼無效。 – Arion 2012-04-06 20:25:17
如果你對答案很好,你可以考慮接受答案。 – Arion 2012-04-06 20:26:23