0

私は、私に送信した各ユーザーからの最後のメッセージを表示する SQL を作成しようとしています。私はphpmyadminを使用しています。

私は2つのテーブルを持っています

ユーザー

ID | ユーザー名
6 6666
7 8888

メッセージ

メッセージ ID | 送信者 ID | レシーバー ID | 件名 | テキスト | 日にち
1 6 3 aaa bbb 2012-07-22 00:14:41
2 6 3 aaa1 bbb1 2012-07-22 00:15:41
3 7 3 vvv vvv 2012-07-22 00:19:41

したがって、結果は(日付(時間)順)でなければなりません

3 7 3 vvv vvv 2012-07-22 00:19:41
2 6 3 aaa1 bbb1 2012-07-22 00:15:41

このクエリを作成しました (ID = 3 であることをテストしました) 以下のクエリは希望どおりに機能しますが、あまり良くなく (最適化され)、このデータを選択するより簡単な方法があると思います

SELECT u.username, m.sender_id , m.subject, m.message
                FROM users u
                LEFT JOIN messages m ON m.sender_id = u.id OR m.message_id = (SELECT b.message_id FROM messages b WHERE b.receiver_id = 3 ORDER BY b.date DESC LIMIT 0,1)
                WHERE m.receiver_id = 3
                GROUP BY m.sender_id
                ORDER BY m.date DESC
4

1 に答える 1

1
select * from messages 
where message_id in(select max(msg.message_id) from messages msg
                    where msg.receiver_id = 3 group by sender_id )
于 2012-07-21T23:08:54.030 に答える