Ich verwende SQL Server 2008, Sie sagen nicht, welche Datenbank Sie verwenden.
Aufgrund der von Ihnen bereitgestellten Informationen scheint Ihre Abfrage für die von Ihnen benötigte Ausgabe zu komplex zu sein. Hier ist eine einfache Abfrage, um alle Nachrichten zu erhalten, die Benutzer 36 betreffen:
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
Ich musste einige Feldnamen ändern, da in SQL Server einige der von Ihnen gewählten Namen reservierte Wörter sind.
SQL-Geige:http://sqlfiddle.com/#!3/b8e88/1
BEARBEITEN: Jetzt haben Sie weitere Informationen hinzugefügt und es wird eine id
angezeigt Feld in der Nachrichtentabelle, könnten Sie so etwas verwenden (Hinweis:Ich habe SQL Server, also müssen Sie wahrscheinlich die Abfrage für MySQL ändern):
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
Die SELECT
im FROM
Teil der Abfrage findet die neueste Nachricht (basierend auf der id
, ich gehe davon aus, dass es sich um eine automatisch inkrementierende Nummer handelt) für jedes geordnete Paar von Absender-/Empfänger-Benutzer-IDs. Das Ergebnis davon wird wieder zu den Fed_Messages
hinzugefügt Tabelle, um sicherzustellen, dass wir die Namen für Absender/Empfänger korrekt erhalten.
Aktualisiertes SQL Fiddle:http://sqlfiddle.com/#!3/1f07a/2