Ik gebruik SQL Server 2008, je zegt niet welke database je gebruikt.
Op basis van de informatie die u hebt verstrekt, lijkt uw vraag te complex voor de uitvoer die u nodig heeft. Hier is een eenvoudige vraag om alle berichten van gebruiker 36 te krijgen:
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
Ik heb enkele veldnamen moeten wijzigen omdat in SQL Server sommige van de namen die je hebt gekozen gereserveerde woorden zijn.
SQL Fiddle:http://sqlfiddle.com/#!3/b8e88/1
BEWERKEN: Je hebt nu wat meer informatie toegevoegd en er is een id
. weergegeven veld in de berichtentabel, zou je zoiets als dit kunnen gebruiken (opmerking:ik heb SQL Server, dus je zult waarschijnlijk de query voor MySQL moeten wijzigen):
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
De SELECT
in de FROM
een deel van de zoekopdracht vindt het meest recente bericht (gebaseerd op de id
, ik neem aan dat het een automatisch oplopend nummer is) voor elk besteld paar gebruikers-ID's van afzender/ontvanger. Het resultaat daarvan wordt weer toegevoegd aan de Fed_Messages
tabel om ervoor te zorgen dat we de namen voor de afzender/ontvanger correct krijgen.
Bijgewerkte SQL Fiddle:http://sqlfiddle.com/#!3/1f07a/2