Estou usando o SQL Server 2008, você não diz qual banco de dados está usando.
A partir das informações que você forneceu, sua consulta parece excessivamente complexa para a saída que você precisa. Aqui está uma consulta simples para obter todas as mensagens envolvendo o usuário 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
Eu tive que alterar alguns nomes de campos, pois no SQL Server alguns dos nomes que você escolheu são palavras reservadas.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
EDITAR: Agora você adicionou mais algumas informações e mostrou que há um
id
campo na tabela de mensagens, você poderia usar algo assim (nota:eu tenho SQL Server, então você provavelmente terá que alterar a consulta para 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
O
SELECT
no FROM
parte da consulta encontra a mensagem mais recente (com base no id
, estou assumindo que é um número de incremento automático) para cada par ordenado de IDs de usuário de remetente/destinatário. O resultado disso é reintegrado ao Fed_Messages
tabela para garantir que os nomes do remetente/receptor estejam corretos. SQL Fiddle atualizado:http://sqlfiddle.com/#!3/1f07a/2