前提
LINEのようなチャットのシステムを作っています。
SQL(mysql)で、以下の2つのテーブルを作りました。
chatspace(テーブル名)
・id
・created_at
...(その他のカラム)
comments(テーブル名)
・id
・chatspace_id
・body
・created_at
...(その他のカラム)
各chatspaceに複数のコメントが投稿されるという設計になっています。
(chatspace_idが同一のcommentsのレコードが複数存在する。)
実現したいこと
LINEのトーク一覧画面のような表示を作るために、
SQLで各chatspaceの情報(全てのカラム)と、
各chatspace中(comments.chatspace_idが同じレコード)の最新(comments.created_atが最大のレコード)の
comments.bodyとcomments.created_at AS commented_atを取得したいです。
JOINやサブクエリ等、関係しそうな情報を調べ試したのですが、実現できなかったのでご教示いただきたいです。
よろしくお願いいたします。
試したこと
・commentsテーブルで、GROUP BY chatspace_idで、idとMAX(created_at)を取得する。次に、これをサブクエリとしてchatspaceの情報を取得。
→
サブクエリの、
SQL
1SELECT chatspace_id, body, MAX(created_at) FROM comments GROUP BY chatspace_id;
の部分で、sql=only_full_group_byが必要というエラーが発生。
(bodyを指定しなければ取得可能。)
・INNER JOINで結合する
→comments.created_atが最大のレコードのみを取得することができない(GROUP BYを使うとsql=only_full_group_byが必要というエラーが発生)
・サブクエリとしてcommentsテーブルを取得しする。このときにWHERE句で>(greater than sign)を使って最大値のみにする。
→
うまくいかなかったのですが、
参考にしたサイトを見失ってしまい、エラーを含め再現できなくなってしまいました。
(docker上で試し、downしてしまったのでログも辿れませんでした)
補足情報(FW/ツールのバージョンなど)
mysql
(最終的にはGORMを使用するので、SQLよりGORMの方が書きやすければGORMで示していただいても結構です。)

回答1件
あなたの回答
tips
プレビュー