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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  GROUP BY ou DISTINCT sur une requête complexe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

GROUP BY ou DISTINCT sur une requête complexe

n°1352690
PedroBD
Posté le 24-04-2006 à 14:24:18  profilanswer
 

Bonjour,
 
J'ai une base qui stocke des produits sur lesquels on effectue des opérations. Ces opérations sont réalisées par différents utilisateurs dans des lieux différents. A un produit peut donc correspondre plusieurs opérations. A une opérations plusieurs utilisateurs et plusieurs lieux.
 
Les lieux sont stockés dans lieu table "Lieu_Produit" et reliés à la table "Produit" par une table intermédiaire qui a une clé primaire. Ce qui me permet d'entrer plusieurs lieux pour un produit.
Même système pour la table intermédiaire Produit_Operation qui relie Produit à Operation.
 
Je voudrais afficher toutes les opérations d'un produit. J'écris la requête que j'ai copié plus bas dans la page.
 
MON PROBLEME:
 
La requête me retourne chaque opération (et ses caractéristiques) repétée pour chaque lieu.
 
Par exemple si sur le produit "pdt1" on a fait l'opération "op1" à Bordeaux, "op2" à Caen et "op3" à Lille,  je vais avoir affiché:
 
op1 -> Bordeaux
op1 -> Caen
op1 -> Lille
 
op2 -> Bordeaux
op2 -> Caen
op2 -> Lille
 
op3 -> Bordeaux
op3 -> Caen
op3 -> Lille
 
 
Si maintenant j'enlève le distinct, c'est encore plus la merde parce que j'ai affiché 3 fois l'opération pour chaque lieu.
 
 
MA QUESTION:
 
Je suppose qu'il faut utiliser un GROUP BY, mais j'arrive pas à trouver le bon.
 
 
Merci de votre aide et du temps que vous prendrez à lire cette longue question!
 
MON CODE:
 
Voici ma requête (logée dans une fonction php):
 

Code :
  1. $scan_operations="SELECT DISTINCT Type_Operation.Id_Type_Operation,Type_Operation.Nom_Type_Operation,";
  2. $scan_operations.="Operation.Id_Operation,Operation.Commentaire_Operation,";
  3. $scan_operations.="Operation_Util.Id_Operation,Operation_Util.Id_Utilisateur,";
  4. $scan_operations.="Utilisateur.Id_Utilisateur,Utilisateur.Alias_Utilisateur,";   
  5. $scan_operations.="Utilisateur.Date_Connexion,Utilisateur.Heure_Connexion,";
  6. $scan_operations.="Produit_Operation.Id_Operation,Produit_Operation.Id_Produit,";
  7. $scan_operations.="Produit.Id_Produit,Produit_Lieu.Id_Lieu,Produit_Lieu.Id_Produit,";
  8. $scan_operations.="Lieu_Produit.Id_Lieu,Lieu_Produit.Nom_Lieu";
  9. $scan_operations.=" FROM Type_Operation";
  10. $scan_operations.=" INNER JOIN Operation";
  11. $scan_operations.=" ON Type_Operation.Id_Type_Operation=Operation.Id_Type_Operation";
  12. $scan_operations.=" INNER JOIN Operation_Util";
  13. $scan_operations.=" ON Operation.Id_Operation=Operation_Util.Id_Operation";
  14. $scan_operations.=" INNER JOIN Utilisateur";
  15. $scan_operations.=" ON Operation_Util.Id_Utilisateur=Utilisateur.Id_Utilisateur";
  16. $scan_operations.=" INNER JOIN Produit_Operation";
  17. $scan_operations.=" ON Produit_Operation.Id_Operation=Operation.Id_Operation";
  18. $scan_operations.=" INNER JOIN Produit";
  19. $scan_operations.=" ON Produit.Id_Produit=Produit_Operation.Id_Produit";
  20. $scan_operations.=" INNER JOIN Produit_Lieu";
  21. $scan_operations.=" ON Produit.Id_Produit=Produit_Lieu.Id_Produit";
  22. $scan_operations.=" INNER JOIN Lieu_Produit";
  23. $scan_operations.=" ON Produit_Lieu.Id_Lieu=Lieu_Produit.Id_Lieu";
  24. $scan_operations.=" WHERE Produit.Id_Produit='$idpdt'";
  25. $scan_operations.=" ORDER BY Operation.Id_Operation";


 
 
 

mood
Publicité
Posté le 24-04-2006 à 14:24:18  profilanswer
 

n°1352720
PedroBD
Posté le 24-04-2006 à 14:49:41  profilanswer
 

En fait j'y suis presque, parce que quand j'enlève le DISTINCT et que je fais un GROUP BY:
 
GROUP BY(Operation.Id_Operation)
 
Ben ça m'affiche comme il faut chacune des opérations sur le produit avec les infos de chaque opération...sauf que le lieu est toujours le même (alors que je mets des lieux différents pour chaque opération).
 
Y a pas un pro du GROUP BY qui pourrait me dire où est la dernière petite couille?
 
Merci

n°1354402
darkfrost
Posté le 26-04-2006 à 15:27:00  profilanswer
 

Le problème vient de tes jointures. Pas le temps de chercher précisement le problème mais cherche dans tes jointures, y'a forcément un truc qui cloche. Tu dois normalement y arriver sans GROUP BY.
 
De plus regarde si la structure de ta base correspond à tes besoins.
 
Tu dis "A une opérations plusieurs utilisateurs et plusieurs lieux.". Ca me semble en contradiction avec l'exemple que tu donnes ;) !

n°1355838
PedroBD
Posté le 28-04-2006 à 11:43:13  profilanswer
 

OK, donc ça peut quand même être faisable en 1 seule requête.
 


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

  GROUP BY ou DISTINCT sur une requête complexe

 

Sujets relatifs
[Résolu] Un peu d'aide pour l'erreur 1064 de cette requêterequête group by & order by
[RÉSOLU]Utilisier les 'in' dans une requéte sqlrequete sql pour une sous chaine
PHP/MySQL: requete de tri et LEFT JOINafficher ligne group by meme si pas de valeurs
[Delphi] probleme requete nilHTML probleme avec tableau tres complexe
optimisation de requete 
Plus de sujets relatifs à : GROUP BY ou DISTINCT sur une requête complexe


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