J'utilise SQL Server 2008, vous ne dites pas quelle base de données vous utilisez.
D'après les informations que vous avez fournies, votre requête semble trop complexe pour la sortie dont vous avez besoin. Voici une requête simple pour obtenir tous les messages impliquant l'utilisateur 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
J'ai dû changer certains noms de champs car dans SQL Server, certains des noms que vous avez choisis sont des mots réservés.
SQL Fiddle :http://sqlfiddle.com/#!3/b8e88/1
MODIF : Vous avez maintenant ajouté quelques informations supplémentaires et montré qu'il existe un id
sur la table des messages, vous pouvez utiliser quelque chose comme ceci (remarque :j'ai SQL Server, vous devrez donc probablement modifier la requête pour 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
Le SELECT
dans le FROM
une partie de la requête trouve le message le plus récent (basé sur le id
, je suppose qu'il s'agit d'un numéro à incrémentation automatique) pour chaque paire ordonnée d'ID utilisateur expéditeur/destinataire. Le résultat de cela est rejoint dans les Fed_Messages
tableau pour nous assurer que nous obtenons les noms corrects pour l'expéditeur/le destinataire.
SQL Fiddle mis à jour :http://sqlfiddle.com/#!3/1f07a/2