Requête avec 2 liaisons dans une même table

Le
Y a personne
Bonjour,

Soit une table Membres avec mem_id, mem_nom, mem_prenom
Soit une table Liaisons avec lia_fk_membres1, lia_fk_membres2

La table liaisons permet de lier 2 membres, donc je peux avoir ceci :

1-3
5-4
1-4
5-1


Donc le membre 1 est lié à 3 autres membres (3-4-5)

J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.

merci de votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Mevzek
Le #21897481
Le Sat, 26 Apr 2008 19:49:27 +0200, Y a personne a écrit:
J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.



Il y a plusieurs façons de faire, par exemple :

SELECT * FROM Membres WHERE mem_id IN
(
SELECT lia_fk_membres1 FROM Liaisons WHERE lia_fk_membres2=1
UNION
SELECT lia_fk_membres2 FROM Liaisons WHERE lia_fk_membres1=1
);

On peut aussi faire des jointures avant ou après l'union.
On peut remplacer l'union par un WHERE avec un OR et un CASE dans la
projection.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
Y a personne
Le #21897471
Patrick Mevzek a écrit :
Le Sat, 26 Apr 2008 19:49:27 +0200, Y a personne a écrit:
J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.



Il y a plusieurs façons de faire, par exemple :

SELECT * FROM Membres WHERE mem_id IN
(
SELECT lia_fk_membres1 FROM Liaisons WHERE lia_fk_membres2=1
UNION
SELECT lia_fk_membres2 FROM Liaisons WHERE lia_fk_membres1=1
);

On peut aussi faire des jointures avant ou après l'union.
On peut remplacer l'union par un WHERE avec un OR et un CASE dans la
projection.




Merci pour ta réponse rapide.

Ca fonctionne correctement.

J'avais bien testé avec UNION, mais je connaissais pas la technique du IN


merci
Publicité
Poster une réponse
Anonyme