|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 13 ![]() |
Bonjour,
J'ai un problème de résultat en double lors de l'exécution de ma requête SQL. En fait, j'ai 3 tables : Producteur, Reseau et Label Un producteur peut avoir plusieurs réseaux et plusieurs labels. Donc, j'ai créer 2 tables d'associations pour les relier : Procteur_Reseau et Producteur_Label. Avec 1 seule requête SQL, je souhaiterai afficher les informations de chaque producteur ainsi que ses réseaux et labels. Mes tables sont composés comme suit : Code :
Code :
Code :
Code :
Code :
|
||||||||||
|
|
00
|
|
|
#2 | |||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Code :
Si vos producteurs ont un label pour un reseau donné, alors vous ne devriez pas avoir une table Producteur_reseau et une table producteur_label, mais une seule table : producteur_reseau_label, qui contiendrait... le résultat que vous cherchez a obtenir ! Donnez un peu plus de détails sur la logique de vos données, et ce qu'elles représentent, car la... il y a quelque chose qui cloche... Tel que vous présentez les choses, ce que vous voulez faire n'est pas possible, car incohérent avec votre modèle de données |
|||||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 13 ![]() |
L'ordre a peu d'importance.
Ce que je ne veux pas, ce sont des résultats en double. Non, les réseaux et les labels sont des choses distinctes. Un producteur a des réseaux et des labels. Ils sont indépendants entre eux. C'est pour ça que j'utilise une table d'association à chaque fois. En fait, il faut que je liste les producteurs avec leurs caractéristiques dans un tableau (au format HTML). Un producteur a des réseaux et des labels. Je suis obligé de passer par une seule requête pour créer cette liste, donc j'utilise plusieurs jointures pour afficher les réseaux et les labels que chaque producteur possède. Le problème, c'est que 1 producteur peut avoir 4 réseaux et 10 labels. Avec ma requête, ça me fait résultat cartésien de 4 * 10 = 40 lignes. Or, je n'en voudrais que 10. Pour avoir : Code :
Je ne sais pas vraiment comment exprimer mon problème (pour ça aussi que je ne sais pas vraiment quoi rechercher sur le net). Mais il n'y a pas de lien entre réseaux et labels. Seulement entre producteur et réseaux et entre producteur et labels. Moi, je voudrais tout regrouper en une seule fois. |
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
OK
Mais alors, comment choisissez vous le label a afficher pour une couple producteur/réseau donné ? (cf ma première question) |
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : mai 2009 Messages : 13 ![]() |
Euh..
Je pense que ma requête doit être vraiment nul si tu me demandes ça. (et tu peux me tutoyer, j'ai que 20 ans et simple stagiaire dans l'administration publique) Code :
Je veux faire un JOIN sur producteur avec reseau et sur producteur avec label. Pas en fonction de Reseau, Label et Reseau doivent agir indépendamment. Donc je récupère tous les id labels correspondant dans la table producteur_label à l'id producteur. Pareil pour réseau. En gros je veux faire ces 2 requêtes mais en 1 seule fois : Code :
|
||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
re,
Ce que vous voulez faire est contraire au principe même des bases de données relationnelles vous essayez de mettre sur la même ligne des éléments qui n'ont rien à voir entre eux : les réseaux et les labels. C'est pour cela que : 1/ vous ne trouvez pas de solution sur le net 2/ vous n'arrivez pas a formuler votre recherche (cela n'a pas de sens, donc comment expliquer quelque chose qui n'a pas de sens ?) 3/vous n'y arrivez pas Au pire dans votre cas, si vraiment vous y tenez, vous pourriez faire un UNION entre vos deux requêtes, en ajoutant une troisième colonne type (label|réseau), mais cela n'a aucun intérêt ! Pourquoi voulez vous effectuer vos deux requêtes en une seule fois ? C'est bien en deux fois qu'il faut les exécuter dans votre cas ! |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 13 ![]() |
Je le sais bien, et j'aurai bien voulu faire en 2 fois.
Seulement, je développe en Java J2EE 1.4.2 avec un framework vieux de 2004 voir 2000 (je suis stagiaire, pas le choix). Le framework étant trop limité, j'ai crée mon propre script de connexion à la base de donnée pour faire comme je le souhaitais et correctement. Seulement, ça ne leur va pas car ils veulent que j"utilise leur framework. Le problème, c'est qu'avec celui-là, je ne peux pas récupérer l'identifiant du producteur et relancer une requête. Je dois lancer des requêtes pour mes bases de données entre les chargements des pages, je ne peux pas le faire à l'intérieur de ma page jsp, le framework ne le permet pas. Moi je veux crée une page liste.jsp qui va lister dans un tableau HTML tous les producteurs. Mais dans ma page, je ne peux pas lancer une requête sql. Donc, je suis obligé de tout faire en une seule fois. J'ai créer un petit algorithme en attendant qui mets dans une liste mes réseaux et mes labels pour voir s'ils n'ont pas déjà été affichés, mais c'est pas très propre. Je ne voudrai pas que ça devienne une solution permanente, mais avec les moyens que j'ai, et si je ne peux pas faire autrement en ne faisant qu'une requête, alors je ne vois pas quoi faire. |
|
|
00
|
|
|
#8 | ||
![]() ![]() |
La solution logique est de faire une UNION entre les deux requêtes qui donnent, l'une les labels des producteurs, l'autre les réseaux des producteurs.
Si un producteur à 4 labels et 10 réseaux, ça fera 14 lignes de résultat. Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 13 ![]() |
Ce n'est pas la solution idéale que je recherchais, mais si ce n'est pas possible de faire mieux, je ferai avec.
Merci de votre aide. |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Si par solution idéale, tu entends "idéale pour le développeur quitte a faire pleurer le serveur de BDD", tu as peut être une alternative : en essayant quelque chose comme ceci
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com