私は2つのテーブル、ブログと投稿を持っており、それらの間には予想される関係があります。投稿は公開またはドラフトできます。公開された投稿とドラフト投稿の数が含まれるすべてのブログを選択したいと思います。どうすればいいですか?
私はこのクエリを試しました:
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
しかし、どちらの場合も、同じ間違った結果が得られました。
これを行うための適切な方法は何ですか?
ありがとう。