|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
Bonjour,
Un petit exemple rapide pour illustrer mon problème : Soit une table VOITURE ayant les champs suivants : id, marque, modèle, gamme avec id en clé primaire Soit une table OPTION ayant les champs suivants : id, option, voiture avec id en clé primaire et voiture en clé étrangère sur id de la table voiture Quelques entrées de ma table VOITURE pourraient être : id 1 marque citroen modele c3 gamme eco id 2 marque citroen modele c3 gamme dynamique id 3 marque citroen modele c3 gamme exclusive Pour la table OPTION j'aurai : id 1 option vitres electriques voiture 2 id 2 option peinture metal voiture 2 id 3 option vitres electriques voiture 3 id 4 option peinture metal voiture 3 id 5 option clim voiture 3 cela signifie que : - la voiture citroen c3 eco n'a pas d'option - la voiture citroen c3 dynamique a "vitres electriques" et "peinture metal" comme option - la voiture citroen c3 exclusive a "clim", "vitres electriques" et "peinture metal" comme option Mon problème est comment sortir une liste des voitures avec toutes leurs options en une seul requête. J'avais bien trouvé ceci : Code :
citroen c3 eco citroen c3 dynamique vitres electriques - peinture metal citroen c3 exclusivevitres electriques - peinture metal - clim Et bien non ! La première ligne ne sors pas ! J'imagine que c'est parce que la c3 eco n'a pas d'option, donc la jointure ne se fait pas et la ligne ne sors pas. La solution serait de mettre une entrée avec option vide pour cette voiture dans la table OPTION mais bon, cela fait une entrée pour rien, inutile... Y a t-il une valeur par défaut que l'on peut affecter au group_concat s'il ne trouve rien ? je doute de cette solution, je n'ai rien vu de tel dans la doc. Une solution avec un join left, right ou autre ??? Je suis pas du tout à l'aise avec les différentes possibilités du JOIN... Merci de votre aide ! |
||
|
|
00
|
|
|
#2 |
![]() ![]() Yves Développeur informatique Inscription : janvier 2007 Messages : 3 878 ![]() |
Quand tu utilise JOIN, tu utilise en réalité INNER JOIN (jointure interne). Donc tu n'aura que les lignes dont la jointure renvoie des éléments des 2 cotés.
Dans ton cas il te faut tous les éléments de gauche sans exceptions et les éléments de droite quand ils existent. Donc une jointure gauche (ou jointure externe gauche) et donc c'est LEFT OUTER JOIN qu'il faut utiliser. Par contre, je ne sais pas comment ton concat va se comporter avec les champs vides.
__________________
Sevyc64 --- Le partage est notre force NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
Merci beaucoup pour cette réponse, il va falloir que je creuse ce JOIN...
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() ![]() Inscription : novembre 2007 Messages : 134 ![]() |
Bonjour,
Je ne connais pas cette syntaxe de jointure que vous avez fait. En reprenant une jointure interne comme vous l'avez écrit, ça serait plutôt quelque chose comme : Code :
FROM VOITURE v INNER JOIN `OPTION` o ON o.voiture= v.id Code :
FROM voiture JOIN ON OPTION WHERE OPTION.voiture=voiture.id D'autre part "OPTION" semble être un mot réservé alors si possible utilisez un autre mot pour votre table |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com