Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
915 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  double jointure "sur un même champ"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

double jointure "sur un même champ"

n°799116
smilm
Posté le 19-07-2004 à 00:49:10  profilanswer
 

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.

mood
Publicité
Posté le 19-07-2004 à 00:49:10  profilanswer
 

n°799140
dividee
Posté le 19-07-2004 à 03:14:20  profilanswer
 

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 ?

n°799141
smilm
Posté le 19-07-2004 à 04:07:02  profilanswer
 

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)

n°799144
dividee
Posté le 19-07-2004 à 06:13:53  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  double jointure "sur un même champ"

 

Sujets relatifs
Probème avec un champ NULL dans un permier enregistrement[MySQL] tester si un champ est présent
[MYSQL] plusieur requete pour le meme champ avec des SUM[JS]changer la valeur d'un champ
[html/php] probleme de passage a la ligne dans un champ text [RESOLU][Java] Question bête sur le double héritage
[ACCESS]copier zone texte formulaire dans le champ d'une table[VB ACCESS]comment faire un champ texte a valeur unique?
supprimer / renommer un champ[MYSQL] Comment appliquer une regex sur un champ ?
Plus de sujets relatifs à : double jointure "sur un même champ"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR