Jeg bruger SQL Server 2008, du siger ikke hvilken database du bruger.
Ud fra de oplysninger, du har leveret, virker din forespørgsel alt for kompleks i forhold til det output, du har brug for. Her er en simpel forespørgsel for at få alle beskeder, der involverer bruger 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
Jeg har været nødt til at ændre nogle feltnavne, da nogle af de navne, du har valgt i SQL Server, er reserverede ord.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
EDIT: Nu har du tilføjet noget mere information og vist, at der er et id
feltet i meddelelsestabellen, kan du bruge noget som dette (bemærk:Jeg har SQL Server, så du bliver sandsynligvis nødt til at ændre forespørgslen til 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
i FROM
en del af forespørgslen finder den seneste besked (baseret på id
, jeg antager, at det er et automatisk stigningsnummer) for hvert bestilt par afsender/modtager-bruger-id'er. Resultatet af det føjes igen til Fed_Messages
tabel for at sikre, at vi får navnene på afsender/modtager korrekte.
Opdateret SQL Fiddle:http://sqlfiddle.com/#!3/1f07a/2