我正在嘗試創建一個消息列表,如Facebook。在SQL中創建消息列表
- 只顯示最後從用戶的會話消息(歷史)
- 當我將展示我的,當我得到的回答能夠體現回答消息(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
如果你有一個SQL的問題,你可以準備一個可修改的測試用例在真棒http://sqlfiddle.com/ :) – biziclop 2012-08-12 10:25:25