J'utilise la requête suivante pour obtenir l'identifiant et le nom d'utilisateur d'un ami dans une base MySQL:Obtenir des données amis dans mysql
SELECT
DISTINCT members.id AS userid,
members.gebruikersnaam AS username,
members.pasfoto AS avatar,
members.id AS link,
FROM
friends
JOIN
members
ON
friends.friend_out = members.id
WHERE
(
friends.friend_in = '".mysql_real_escape_string($userid)."'
OR
friends.friend_out = '".mysql_real_escape_string($userid)."'
)
AND
friends.active = 1
ORDER BY
members.username
ASC
Dans la table d'amis il y a une ligne pour chaque amitié, de sorte que l'amitié est dans les deux sens.
Par exemple:
friend_in ----- friend_out
4 ------------- 6 ---------
Donc, c'est la seule ligne pour une amitié entre l'utilisateur 4 et 6.
Dans la requête ci-dessus, je veux obtenir les données d'un ami de l'utilisateur connecté. Je dois donc vérifier si friend_in est l'utilisateur connecté (donc friend_out doit être retourné par l'instruction select) de friend_out est l'utilisateur connecté (donc friend_in doit être retourné par l'instruction select).
Dans la requête ci-dessus, il doit y avoir quelque chose de changé dans de join pour récupérer les données des amis.
Quelqu'un peut-il m'aider avec ce problème?
Oh je suis désolé, je l'ai traduit en anglais. Mais ce n'est pas le problème en fait. Votre deuxième remarque est le problème en effet. Mais est-il possible de créer une condition de jointure pour rejoindre l'identifiant des amis et non l'identifiant de l'utilisateur? Parce qu'un syndicat tout est rigoureux je pense. Je veux seulement les données d'ami comme résultat, au lieu des données d'ami et d'utilisateur. – Arjen
@Arjen: Je ne suis pas sûr de ce que vous entendez par "trop rigoureux". C'est comme ça que je le ferais. L'alternative est de stocker toutes les amitiés deux fois (une fois dans chaque direction) - alors vous pouvez simplifier la requête beaucoup au prix de doubler votre stockage de données. –