私は3つのテーブルを持っています - 好き、コメント、投稿。 likesとcommentsの表には、投稿を参照するIDがあります。MySQL - 正しい母集団
私は投稿の好き嫌いを数えたいと思っていますが、サブクエリについての私の限られた知識は本当に難しい作業であることが証明されています。
私のテーブルのレイアウトはSQL Fiddleです。私は何時間も私の机の上で私の頭を開いたままにしていますが、それでもバイトは近づいていません!!
コメント
は
投稿を好き
は私は3つのテーブルを持っています - 好き、コメント、投稿。 likesとcommentsの表には、投稿を参照するIDがあります。MySQL - 正しい母集団
私は投稿の好き嫌いを数えたいと思っていますが、サブクエリについての私の限られた知識は本当に難しい作業であることが証明されています。
私のテーブルのレイアウトはSQL Fiddleです。私は何時間も私の机の上で私の頭を開いたままにしていますが、それでもバイトは近づいていません!!
コメント
は
投稿を好き
はあなたが必要な結果を得るために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;
これには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追加する必要があり、そしてあなたがそうでなければ同類の数でコメントの数を乗算し、その逆
あなたのご意見ありがとうございます!これは私が最初に使っていたものと似ていますが、違いを生み出した別個のカウントではありません!ありがとう:) – huzi8t9
感謝を万力だろう、私はにサブクエリを使用していました'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
@ huzi8t9私は答えを更新し、合計を得る別のクエリを追加しました。 –
あなたはウィザードです!どうもありがとうございます。私は泣いてうれしいです。私はちょうど移動し、正しいコードを取得しようとすると正しいと思ったSQLのビットを変更しているとあなたはそれを釘付けてきました!ありがとうございました!! – huzi8t9