double jointure "sur un même champ"

double jointure "sur un même champ" - SQL/NoSQL - Programmation

Marsh Posté le 19-07-2004 à 00:49:10    

Salut,
 
J'ai un petit probleme MySQL.
 
J'aimerais recuperer deux pseudos de deux enregistrements d'une table membres à l'aide d'une jointure, seulement je ne sais pas comment distinguer un pseudo de l'autre.
Je m'explique.
 
j'ai une table alliance_exclusion:
id  id_alliance  id_membre  id_demandeur[...]
 
J'aimerais recuperer les pseudos de id_membre et id_demandeur qui sont contenu dans une table membres.
 
Pour recuperer le pseudo de id_membre je fais actuellement ceci:
SELECT alliance_exclusion.*, membres.pseudo FROM alliance_exclusion
LEFT OUTER JOIN membres ON membres.id=alliance_exclusion.id_membre
WHERE id_alliance=$nom->id AND membres.id IS NOT NULL
 
Et je pensais à quelque chose comme ca pour recuperer le pseudo de id_demandeur:
SELECT alliance_exclusion.*, membres.pseudo FROM alliance_exclusion
LEFT OUTER JOIN membres ON membres.id=alliance_exclusion.id_membre
LEFT OUTER JOIN membres ON membres.id=alliance_exclusion.id_demandeur
WHERE id_alliance=$nom->id AND membres.id IS NOT NULL
 
Seulement, j'ai deux fois membres.pseudo maintenant.
Cette requete n'est évidemment pas effectuable.
 
Merci d'avance.

Reply

Marsh Posté le 19-07-2004 à 00:49:10   

Reply

Marsh Posté le 19-07-2004 à 03:14:20    

Ben suffit de renommer les tables, qqch du genre:


SELECT alliance_exclusion.*, m1.pseudo, m2.pseudo FROM alliance_exclusion  
LEFT OUTER JOIN membres AS m1 ON m1.id=alliance_exclusion.id_membre  
LEFT OUTER JOIN membres AS m2 ON m2.id=alliance_exclusion.id_demandeur  
WHERE id_alliance=$nom->id AND m1.id IS NOT NULL


 
Cela dit, je comprends pas bien la requête. Pq des LEFT OUTER JOIN ? id_membre et id_demandeur devraient être des FK de alliance_exclusion, non ?

Reply

Marsh Posté le 19-07-2004 à 04:07:02    

Merci beaucoup !!
Raah le pire dans ton ça c'est que j'avais déjà vu quelque chose semblable dans un bouquin.
 
Je n'ai pas très bien compris ta question...
FK=Foreign Key ça c'est bon.
Mais où est le probleme ?
 
(je suis pas un pro en SQL donc si tu pouvais être un peu plus explicite)

Reply

Marsh Posté le 19-07-2004 à 06:13:53    

Ben oui, le LEFT OUTER JOIN indique que tu veux inclure les enregistrements de "alliance_exculsion", même ceux pour lesquels id_membre ne se retrouve pas dans la table "membre".
Mais cela ne devrait pas se produire. En faisant de id_membre et de id_demandeur des Foreign Key sur membre.id, tu introduis une (deux en fait) contrainte dans la base de donnée qui oblige ces champs à avoir une correspondance dans la table membre. Par exemple, ça empêche d'ajouter un enregistrement dans alliance_exclusion qui référence un membre.id qui n'existe pas, ou d'effacer un membre sans effacer également tous les enregistrements qui lui font référence dans alliance_exclusion. C'est l'intégrité référentielle, la base du modèle relationnel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed