Използвам SQL Server 2008, не казвате коя база данни използвате.
От информацията, която сте предоставили, вашата заявка изглежда прекалено сложна за изхода, който ви е необходим. Ето една проста заявка за получаване на всички съобщения, включващи потребител 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
Трябваше да променя някои имена на полета, тъй като в SQL Server някои от избраните от вас имена са запазени думи.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
РЕДАКТИРАНЕ: Сега добавихте още информация и показахте, че има id
поле в таблицата със съобщения, можете да използвате нещо подобно (забележка:имам SQL Server, така че вероятно ще трябва да промените заявката за 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
в FROM
част от заявката намира най-новото съобщение (въз основа на id
, предполагам, че това е автоматично увеличаващо се число) за всяка поръчана двойка потребителски идентификатори на подател/получател. Резултатът от това се присъединява отново към Fed_Messages
таблица, за да сме сигурни, че сме получили правилни имената на подателя/получателя.
Актуализиран SQL Fiddle:http://sqlfiddle.com/#!3/1f07a/2