2017-02-17 16 views
0

私は3つのテーブルを持っています - 好き、コメント、投稿。 likesとcommentsの表には、投稿を参照するIDがあります。MySQL - 正しい母集団

私は投稿の好き嫌いを数えたいと思っていますが、サブクエリについての私の限られた知識は本当に難しい作業であることが証明されています。

私のテーブルのレイアウトはSQL Fiddleです。私は何時間も私の机の上で私の頭を開いたままにしていますが、それでもバイトは近づいていません!!

コメント

Comment table

Like table

投稿を好き

Posts table

答えて

0

あなたが必要な結果を得るためにjoinを使用することができ、例えば:

SELECT p.post_id, COUNT(l.like_id) AS likes, COUNT(c.comment_id) AS comments 
FROM posts p LEFT JOIN likes l ON p.post_id = l.like_post 
LEFT JOIN comments c ON p.post_id = c.comment_post 
GROUP BY p.post_id; 

我々はポストテーブルからすべてのレコードは、彼らがどのようなを持っているか、いないにもかかわらず、表示されることを意味する、ここでLEFT JOINを使用HVEコメント。以下は

同じ出力を得るためにサブクエリの方法です:

SELECT post_id, 
(SELECT COUNT(*) FROM likes WHERE like_post = post_id) AS likes, 
(SELECT COUNT(*) FROM comments where comment_post = post_id) AS comments 
FROM posts; 

を更新

あなたは合計を計算したい場合は、例えば、クエリで変数を使用することができます。

SELECT post_id, 
@comments := (SELECT COUNT(*) FROM likes WHERE like_post = post_id) AS likes, 
@likes := (SELECT COUNT(*) FROM comments where comment_post = post_id) AS comments, 
(@comments + @likes) as total 
FROM posts, (SELECT @comments:=0, @likes := 0) a; 
+0

感謝を万力だろう、私はにサブクエリを使用していました'SELECT p.post_id、 (SELECT COUNT(*)FROM like like_post = p.post_id)ASは好きなように、 (comment_post = p.post_idのコメントからSELECT COUNT(*)FROMコメントを削除します) ASコメントでは、 投稿として (likes + comments)が投稿されましたが、好きなコメントはこの方法では使用できません。これを達成できますか? – huzi8t9

+1

@ huzi8t9私は答えを更新し、合計を得る別のクエリを追加しました。 –

+0

あなたはウィザードです!どうもありがとうございます。私は泣いてうれしいです。私はちょうど移動し、正しいコードを取得しようとすると正しいと思ったSQLのビットを変更しているとあなたはそれを釘付けてきました!ありがとうございました!! – huzi8t9

1

これにはGROUP BYを使用します。

SELECT 
posts.post_id, COUNT(DISTINCT likes.like_id) as likes,COUNT(DISTINCT comments.comment_id) as comments, 
FROM posts 
LEFT JOIN likes ON likes.like_post=posts.post_id 
LEFT JOIN comments ON comments.comment_post=posts.id 
GROUP BY posts.post_id 

あなたは以上の2つのテーブルを結合しているとCOUNTにDISTINCT追加する必要があり、そしてあなたがそうでなければ同類の数でコメントの数を乗算し、その逆

+0

あなたのご意見ありがとうございます!これは私が最初に使っていたものと似ていますが、違いを生み出した別個のカウントではありません!ありがとう:) – huzi8t9

関連する問題