ここで、以前の質問を拡張します。
プライベート チャット システム MYSQL クエリ ORDERBY および GROUPBY
さらに、users という名前のテーブルをもう 1 つ作成しました。そこからユーザー情報を取得します。
メッセージ テーブル
message_id|sender_id||receiver_id|message_text| created_time
1 101 102 Message A 2012-06-07 08:07:18
2 101 102 Message B 2012-06-07 08:10:20
3 103 102 Message C 2012-06-07 08:12:43
ユーザー テーブル:
id | name
101 bob
102 jack
103 mark
最終的に、次の結果を得ることができます。
name|message_text | created_time
mark message C 2012-06-07 08:12:43
bob message B 2012-06-07 08:10:20
このクエリを使用すると、次のようになります。
SELECT * FROM messages,users
WHERE messages.receiver_id = 102
AND messages.sender_id=users.id
AND messages.created_time IN
(SELECT MAX(created_time)
FROM messages
GROUP BY sender_id)
ORDER BY messages.created_time DESC
今、私が結果に欲しいのは
jack(id:102) が mark(id:103) に返信した場合、どうすればこの出力を取得できますか:
name|message_text | created_time
mark message D 2012-06-07 08:12:48
bob message B 2012-06-07 08:10:20
注:ここにある「メッセージ D」とタイムスタンプは、ジャックがマークに返信したものです。
ここで、message_text フィールドには、mark と jack の間の最後のメッセージが表示されます。created_time フィールドにはメッセージの作成時刻が表示され、name フィールドには、jack がメッセージを送受信している相手の名前が表示されます。
テーブルを変更/分割する必要があると考えていますが、このタスクを実行する方法とクエリがわかりません。