Saya menggunakan SQL Server 2008, Anda tidak menyebutkan database mana yang Anda gunakan.
Dari informasi yang Anda berikan, kueri Anda tampaknya terlalu rumit untuk keluaran yang Anda butuhkan. Berikut kueri sederhana untuk mendapatkan semua pesan yang melibatkan pengguna 36:
SELECT
sender.msg_user_name AS sender_user_name
,recipient.msg_user_name AS recipient_user_name
,msg_date
,msg_text
FROM
dbo.Fed_Messages
INNER JOIN dbo.Fed_User AS sender
ON sender.msg_user_id = sender_user_id
INNER JOIN dbo.Fed_User AS recipient
ON recipient.msg_user_id = recipient_user_id
WHERE
sender_user_id = 36
OR recipient_user_id = 36
ORDER BY
msg_date DESC
Saya harus mengubah beberapa nama bidang seperti di SQL Server beberapa nama yang Anda pilih adalah kata-kata yang dicadangkan.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
EDIT: Sekarang Anda telah menambahkan beberapa informasi lagi, dan menunjukkan ada id
pada tabel pesan, Anda dapat menggunakan sesuatu seperti ini (catatan:Saya memiliki SQL Server sehingga Anda mungkin harus mengubah kueri untuk MySQL):
SELECT sender.msg_user_name AS sender_user_name
,recipient.msg_user_name AS recipient_user_name
,msg_date
,msg_text
FROM dbo.Fed_Messages
INNER JOIN dbo.Fed_User AS sender ON sender.msg_user_id = sender_user_id
INNER JOIN dbo.Fed_User AS recipient ON recipient.msg_user_id = recipient_user_id
INNER JOIN ( SELECT MAX(id) AS most_recent_message_id
FROM dbo.Fed_Messages
GROUP BY CASE WHEN sender_user_id > recipient_user_id
THEN recipient_user_id
ELSE sender_user_id
END -- low_id
,CASE WHEN sender_user_id < recipient_user_id
THEN recipient_user_id
ELSE sender_user_id
END -- high_id
) T ON T.most_recent_message_id = dbo.Fed_Messages.id
WHERE sender_user_id = 36
OR recipient_user_id = 36
ORDER BY msg_date DESC
SELECT
di FROM
bagian dari kueri menemukan pesan terbaru (berdasarkan id
, Saya berasumsi itu adalah nomor yang bertambah secara otomatis) untuk setiap pasangan id pengguna pengirim/penerima yang dipesan. Hasilnya digabungkan kembali ke Fed_Messages
tabel untuk memastikan kami mendapatkan nama pengirim/penerima yang benar.
SQL Fiddle yang diperbarui:http://sqlfiddle.com/#!3/1f07a/2