Używam SQL Server 2008, nie mówisz, której bazy danych używasz.
Z informacji, które podałeś, twoje zapytanie wydaje się zbyt skomplikowane dla wymaganych wyników. Oto proste zapytanie, aby uzyskać wszystkie wiadomości dotyczące użytkownika 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
Musiałem zmienić niektóre nazwy pól, ponieważ w SQL Server niektóre z wybranych nazw są słowami zastrzeżonymi.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
EDYTUJ: Teraz dodałeś więcej informacji i pokazałeś, że istnieje id
pole w tabeli wiadomości, możesz użyć czegoś takiego (uwaga:mam SQL Server, więc prawdopodobnie będziesz musiał zmienić zapytanie dla 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
w FROM
część zapytania znajduje najnowszą wiadomość (na podstawie id
, zakładam, że jest to liczba automatycznie zwiększająca się) dla każdej zamówionej pary identyfikatorów użytkownika nadawcy/odbiorcy. Wynik tego jest ponownie dołączany do Fed_Messages
tabeli, aby upewnić się, że otrzymamy poprawne nazwy nadawcy/odbiorcy.
Zaktualizowane SQL Fiddle:http://sqlfiddle.com/#!3/1f07a/2