OVH Cloud OVH Cloud

[SQL] Frère et soeurs : JOIN ?

2 réponses
Avatar
Stéphane Santon
Bonjour,

J'aimerais avoir un peu d'aide pour la mise au point d'une requête SQL
(sur MySQL) pour sortir les membres d'une association, en particulier
frères et soeurs.
Je précise que je fais rarement du SQl si évolué, que je n'ai jamais eu
de formation SGBD, et qu'il peut donc y avoir pas mal de bêtises dans ce
que j'ai déjà fait.

J'ai actuellement (simplifié) :

1 table "membres" :
------------------
id_Membre : int primary
mb_Nom : varchar
mb_AdrLieu : Int : lien vers table Lieux
mb_Pere : Int : lien vers id table Membres
mb_Mere : Int : lien vers id table Membres

1 table "lieux" :
-------------
id_Lieu : Int primary
lxVille : varchar

Requete pour la liste des membres associée à leur Père, Mère, Ville :
-------------------------------------------------------
SELECT
mb.id_membre AS mbId, mb.mb_AdrLieu,
mb.mb_Nom AS mbNom, mb.mb_Pere, mb.mb_Mere,
mbPere.id_membre AS peId, mbPere.mb_Nom AS peNom,
mbMere.id_membre AS meId, mbMere.mb_Nom AS meNom,
lxAdr.id_lieu AS adId, lxAdr.lx_Ville AS adVille
FROM gaut_membres AS mb

LEFT OUTER JOIN membres AS mbPere
ON (mb.mb_Pere = mbPere.id_membre)

LEFT OUTER JOIN membres AS mbMere
ON (mb.mb_Mere = mbMere.id_membre)

LEFT OUTER JOIN lieux AS lxAdr
ON (mb.mb_AdrLieu = lxAdr.id_lieu)

WHERE 1

ORDER BY mb.mb_Nom ASC


MAINTENANT, je voudrais lister *avec chaque membre*, ses frères et
soeurs membres, donc de père ou mère commun.
Je pense donc qu'il y aura UN enregistrement supplémentaire par frère ou
soeur au-delà du premier (je trierai ensuite pour l'affichage).

J'ai modifié la requête pour qu'elle me donne la liste des frères et
soeur, en rajoutant

LEFT JOIN membres AS mbFrere
ON (mb.mb_Pere = mbFrere.mb_Pere)

mais elle n'inclut pas ceux qui n'ont aucun frère ou soeur.
******************************

Puis avoir la bonne formule ??

MERCI !

--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime

2 réponses

Avatar
P'tit Marcel
Stéphane Santon écrivit
news::

J'aimerais avoir un peu d'aide pour la mise au point d'une requête SQL
(sur MySQL) pour sortir les membres d'une association, en particulier
frères et soeurs.

-------------------------------------------------------
SELECT
mb.id_membre AS mbId, mb.mb_AdrLieu,
mb.mb_Nom AS mbNom, mb.mb_Pere, mb.mb_Mere,
mbPere.id_membre AS peId, mbPere.mb_Nom AS peNom,
mbMere.id_membre AS meId, mbMere.mb_Nom AS meNom,
lxAdr.id_lieu AS adId, lxAdr.lx_Ville AS adVille
FROM gaut_membres AS mb



mb.mb_Pere et mbPere.id_membre sont identiques par construction donc tu
peux éliminer cette dernière colonne
idem pour mb.mb_Mere et mbMere.id_membre
idem pour mb.mb_AdrLieu et lxAdr.id_lieu


WHERE 1



superflu : tu peux virer cette ligne


MAINTENANT, je voudrais lister *avec chaque membre*, ses frères et
soeurs membres, donc de père ou mère commun.
Je pense donc qu'il y aura UN enregistrement supplémentaire par frère ou
soeur au-delà du premier (je trierai ensuite pour l'affichage).



c'est pas vraiment un tri, plutôt un traitement de la rupture.


LEFT JOIN membres AS mbFrere
ON (mb.mb_Pere = mbFrere.mb_Pere)



et les demi-frères ?
;-)


mais elle n'inclut pas ceux qui n'ont aucun frère ou soeur.



si, et ça marchera même avec une jointure fermée : au minimum tu vas
récupérer dans la fratrie le membre lui-même


Puis avoir la bonne formule ??



tu as dû ajouter une condition erronée dans le WHERE.
publie donc ta requête que tu affirme ne pas fonctionner.


eça
--
P'tit Marcel
Avatar
Stéphane Santon
Bonjour,

P'tit Marcel a écrit :
> J'aimerais avoir un peu d'aide pour la mise au point d'une requête SQL
> (sur MySQL) pour sortir les membres d'une association, en particulier
> frères et soeurs.

superflu : tu peux virer cette ligne



J'avais simplifié, mais gardé la structure.

c'est pas vraiment un tri, plutôt un traitement de la rupture.



Je ne connais pas le vocabulaire de sgbd.

si, et ça marchera même avec une jointure fermée : au minimum tu vas
récupérer dans la fratrie le membre lui-même
tu as dû ajouter une condition erronée dans le WHERE.
publie donc ta requête que tu affirme ne pas fonctionner.



Tu as raison, ça a l'air de marcher.
Je ne sais pas ce que j'avais fait.

Tout est décrit là :
http://gautreau.team-santonum.com/sql.php
utilisateur : sql
mot de passe : aide

Il y a surement optimisations à faire en masse...

--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime