Double jointure sur une meme table
Bonjour à tous.
J'ai une table où j'enregistre des membres.
Code:
tblmembres (id_membres, pseudo, nom)
Dans l'objectif de pouvoir mettre les membres en relation (un membre peu avoir un autre comme amis, ou sur sa liste noire), j'ai créer une table
Code:
tblrelations(id_relation, id_membre1, id_membre2, type_relation)
Je veux écrire un sql qui affichent les amis du membre dont l'ID est 50.
J'ecris le SQl
Code:
1 2 3
| SELECT * FROM tblrelations WHERE
id_membre1='50' OR id_membre2='50'
AND type_relation='1' |
Le problème est que cette requete renvoi les identifiants alors que moi je veux les pseudos des membres. Mais je ne vois pas bien comment avec un INNER JOIN recuperer les pseudos correspondants aux 2 colonnes id_membre1 et id_membre2.
Merci de votre aide
autre solution avec une seule jointure pour tout
Bonjour,
Une autre solution avec une seule requête et jointure :
On part de l'hypothèse qu'il y a réciprocité, si l'un est ami avec l'autre, l'autre est ami avec l'un.
Code:
1 2 3 4 5 6 7 8 9 10 11
|
SELECT DISTINCT t2.id_membres, t2.nom
-- on filtre les éléments uniques car membre1 peut être ami de membre2 et vice versa
FROM tblrelations t1
INNER JOIN tblmembres t2 ON ( t1.id_membre1 =50 OR t1.id_membre2 =50 )
AND t1.type_relation =1
-- on filtre ici au lieu du where pour limiter les résultats dans la jointure
AND (t2.id_membres = t1.id_membre1 OR t2.id_membres = t1.id_membre2)
-- on crée le lien entre les deux tables
AND t2.id_membres <>50
-- on enlève le membre sur lequel on fait la recherche |
Normalement je n'ai pas du me tromper, à tester sur un jeu de résultat.
Bon courage