私は3種類のテーブルを持っています:複数のテーブルからデータを取得するSQL
メッセージ、コメントとアバター。
私がしたいことは次のとおりです: メッセージ内のすべてのメッセージを数え、コメントを数え、各ユーザーのアバターを表示します。
これは、テーブルが構築されている方法です。
メッセージ - > messages_id、user_idは、タイトル、メッセージ
コメント - > comments_id、messages_id、
アバターコメント - > avatar_id、USER_IDを、アバターを
私は次のことを試してみました:
SELECT *, COUNT(comments.comments_id) AS commentCount
FROM messages
LEFT JOIN comments ON messages.messages_id = comments.messages_id
LEFT JOIN avatar on messages.user_id = avatar.user_id
しかし、私はメッセージのための1つの行を取得し、残りは表示されません。
ここで間違っているのは何ですか?
SELECT messages_id
, title
, message
, user_id
, avatar_id
, avatar
, count(*) as commentCount
FROM messages
inner join avatar on messages.user_id = avatar.user_id
left join comments on messages.messages_id = comments.messages_id
GROUP BY messages_id
場合、これは動作するはずです:あなたはGROUP BY
を使用する必要が
返信いただきありがとうございます。しかし、私は自分のデータベースにある2つのメッセージの代わりに、ただ1つのメッセージしか受け取っていません。 Messages_idは実際にはメッセージ内で一意であり、user_idはアバターで一意です。 多分、すべてのメッセージにコメントがあるわけではないことを指定する必要があります。 – moonwalker
@moonwalkerは、私が書いた2番目のクエリを確認します。テーブルデータ、予想される出力、実際の出力の例があればうまくいかない場合は参考になります。 – DavidEG
Davidに感謝します。 2番目の解決策は素晴らしいです。私はそれを勉強し、私が間違っていたことを理解しようとします。 – moonwalker