Facebookのようなメッセージリストを作成しようとしています。
- ユーザーの会話からの最後のメッセージのみを表示(履歴)
- show mineを送信するとき、回答を受け取るときshow Answeredメッセージ(1行)
データベースデータ:
SQLクエリ
SELECT m.message_id, u.username, m.subject, m.message
, m.status, UNIX_TIMESTAMP(m.date) as date
FROM users u
LEFT JOIN messages m ON m.sender_id = u.id
WHERE m.message_id in (SELECT max(msg.message_id)
FROM messages msg
WHERE msg.receiver_id = 3
GROUP BY sender_id)
UNION
SELECT m.message_id, u.username, m.subject, m.message
, m.status, UNIX_TIMESTAMP(m.date) as date
FROM users u
LEFT JOIN messages m ON m.receiver_id = u.id
WHERE m.message_id in (SELECT max(msg.message_id)
FROM messages msg
WHERE msg.sender_id = 3
GROUP BY receiver_id)
GROUP BY u.username
ORDER BY date DESC
私が送信するすべてのメッセージ(私のID = 3)と、私に送信されたすべてのメッセージを受信しようとし、ユーザー名でグループ化します
SQLの結果:
Array
(
[0] => Array
(
[message_id] => 10
[username] => 8888
[subject] => без темы
[message] => 555
[status] => 0
[date] => 11 August 2012, 2:22
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[1] => Array
(
[message_id] => 7
[username] => 8888
[subject] => hi
[message] => 333
[status] => 0
[date] => 11 August 2012, 2:15
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[2] => Array
(
[message_id] => 4
[username] => 6666
[subject] => Тема
[message] => 2
[status] => 0
[date] => 11 August 2012, 2:02
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[3] => Array
(
[message_id] => 1
[username] => fffffffff
[subject] => privet
[message] => tttt
[status] => 0
[date] => 11 August 2012, 1:38
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
)
ご覧のとおり、GROUP BY
ユーザー名は機能しません。3->7と7->3が表示されますが、7->3が回答で最後のメッセージでした。グループが機能しない理由がわかりません。たぶんあなたはこの問題を解決するためのより簡単な方法で私を助けることができますか?
したがって、SQLには「sender_id = 3」、「receiver_id = 3」が必要であり、テーブルデータからの結果は次のようになります。
- message_id-> 1
- message_id-> 4
- message_id-> 10