前提・実現したいこと
以下のメッセージテーブルから、自分がやりとりした相手一覧と、時間、ユーザ情報を取得したいです。
to_user_id,from_user_idから、自分に送られてきたメッセージ、また自分が送ったメッセージをgroupし一覧で取得し、messageテーブルの作成日、メッセー文章、ユーザ情報を取得したいです。
messageテーブル |----+------------+--------------+-----------+-----------------| | id | to_user_id | from_user_id | message | created_at | |----+------------+--------------+-----------+-----------------| | 1 | 1 | 2 | こんちわ! | 2021/1/1 00:01 | | 2 | 2 | 3 | こんちわ! | 2021/1/3 00:02 | | 3 | 3 | 4 | こんちわ! | 2021/1/2 00:03 | | 4 | 4 | 5 | こんちわ! | 2021/1/4 00:03 | | 5 | 5 | 1 | こんちわ! | 2021/1/5 00:03 | | 6 | 1 | 2 | こんちわ! | 2021/1/10 00:33 | | 7 | 3 | 2 | こんちわ! | 2021/1/11 20:00 | | 8 | 3 | 2 | こんちわ! | 2021/1/10 10:03 | | 9 | 2 | 3 | こんちわ! | 2021/1/2 01:03 | | 10 | 5 | 1 | こんちわ! | 2021/1/4 02:03 | |----+------------+--------------+-----------+-----------------|
user table |----+------------| | id | name | |----+------------| | 1 | みっちゃん | | 2 | なっちゃん | | 3 | タカハシ | | 4 | りょうた | | 5 | うさみ | |----+------------|
試したこと
sql文で以下を実行し、userテーブルを軸に、messageテーブルをつなげ取得することができましたが、messageテーブルの作成日、messageを追加すると同じユーザが重複して取得されてしまいます。ユーザはあくまでも1つで最新のmessageが紐付けられた状態で取得したいです。
select * from user join ( SELECT DISTINCT CASE WHEN to_user_id = 2 THEN from_user_id ELSE to_user_id END as userid,message.created_at FROM message WHERE from_user_id = 2 OR to_user_id = 2 ORDER BY created_at desc ) msg on msg.userid = user.system_user_id
どうぞよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/28 01:31