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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Encore un probleme de requete SQL

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Encore un probleme de requete SQL

n°1102841
cod57
Posté le 31-05-2005 à 13:30:56  profilanswer
 

Bonjour à tous,
 
Me re-voici avec mon TP:
 
 
 
http://pierreetdecor.free.fr/TEST/TABLE%20TP.jpg
 
Je dois ecrire la requete suivante:
 
 Numéro et désignation des articles commandés par au moins deux clients différents.
 
j'ai ecris ca:
 
SELECT DISTINCT De.NoArt,désignation FROM détailCmde AS De,commande AS Co,client AS Cl ,article AS AR WHERE De.NoCmde=Co.NoCmde AND Cl.NoClient=Co.NoClient AND Ar.NoArt=De.NoArt GROUP BY NoArt HAVING COUNT(De.NoArt)>1 LIMIT 0, 30;
 
Qui me donne ca:
 
NoArt  désignation
A2  Fraise
A3  Pomme
A4  Lamborghini
A5  Citron
A6  Poisson
 
le probleme c'est que je ne fait que je ne tiens pas compte des clients ayant commandé plusieurs fois le meme articles et je ne vois pas vraiment comment faire pour integrer cette donnée.
 
Merci d'avance

mood
Publicité
Posté le 31-05-2005 à 13:30:56  profilanswer
 

n°1103000
Toti2006
Posté le 31-05-2005 à 15:18:58  profilanswer
 

j'ai essayé de trouver avec toi une solution mais c'est impossible je pense avec cette état pcq on a aucun champs qui indique combien du fois le client a commandé un article x, voilà j'ai une petite idée mais je ne sais pas est ce que ca va marcher, tu vas ajouter un attribu ds la table de jointure détail commande (NbrCommArt) et chaque fois tu incrément +1 voilà et ds la requete tu mets la condition voilà j'attends ta réponse

n°1103011
cod57
Posté le 31-05-2005 à 15:25:59  profilanswer
 

Toti2006 a écrit :

j'ai essayé de trouver avec toi une solution mais c'est impossible je pense avec cette état pcq on a aucun champs qui indique combien du fois le client a commandé un article x, voilà j'ai une petite idée mais je ne sais pas est ce que ca va marcher, tu vas ajouter un attribu ds la table de jointure détail commande (NbrCommArt) et chaque fois tu incrément +1 voilà et ds la requete tu mets la condition voilà j'attends ta réponse


 
merci pour ta reponse,mais comme c'est un TP je n'ai pas le "droit" de toucher aux tables.
Je continue de chercher,mon formateur m'a assuré qu'il y avait une solution...

n°1103015
jay-jay69
Posté le 31-05-2005 à 15:30:06  profilanswer
 

J'ai aussi regardé un peu, et sans un champ supplémentaire je vois pas trop trop... Du moins en 5mins...!
Si j'ai un eclair, je te tiens au courant!

n°1103041
Toti2006
Posté le 31-05-2005 à 15:47:10  profilanswer
 

là cod57 je ne vois pas vraiment cette solution désole j'ai ton MLD devant moi mais j'arrive pas a trouver !!

n°1103168
ali0baba
Posté le 31-05-2005 à 16:56:50  profilanswer
 

il suffit juste de regarder si le produit a ete commander par 2 client differents
un truc de ce genre devrait fonctionner (meme si ya plus simple ...) :
 
select distinct ar.NoArt , ar.désignation
 
from   client c1,
       client c2,
       article ar
 
where  ar.NoArt in (
 
                    SELECT DISTINCT De.NoArt
                    FROM    détailCmde AS De,
                            commande AS Co,
                            client AS Cl ,
                            article AS AR  
                    WHERE   De.NoCmde=Co.NoCmde  
                            AND Cl.NoClient=Co.NoClient
                            AND Ar.NoArt=De.NoArt  
                            AND c1.NoClient = Cl.NoClient
                    GROUP BY NoArt  
                    HAVING COUNT(De.NoArt)>1  
 
       )
and    ar.NoArt in (
 
                    SELECT DISTINCT De.NoArt
                    FROM    détailCmde AS De,
                            commande AS Co,
                            client AS Cl ,
                            article AS AR  
                    WHERE   De.NoCmde=Co.NoCmde  
                            AND Cl.NoClient=Co.NoClient
                            AND Ar.NoArt=De.NoArt  
                            AND c2.NoClient = Cl.NoClient
                    GROUP BY NoArt  
                    HAVING COUNT(De.NoArt)>1  
 
       )
and c1.NoClient != c2.NoClient
 
GROUP BY ar.NoArt  
LIMIT 0, 30;

n°1103266
cod57
Posté le 31-05-2005 à 17:55:27  profilanswer
 

ali0baba a écrit :

il suffit juste de regarder si le produit a ete commander par 2 client differents
un truc de ce genre devrait fonctionner (meme si ya plus simple ...) :
 
select distinct ar.NoArt , ar.désignation
 
from   client c1,
       client c2,
       article ar
 
where  ar.NoArt in (
 
                    SELECT DISTINCT De.NoArt
                    FROM    détailCmde AS De,
                            commande AS Co,
                            client AS Cl ,
                            article AS AR  
                    WHERE   De.NoCmde=Co.NoCmde  
                            AND Cl.NoClient=Co.NoClient
                            AND Ar.NoArt=De.NoArt  
                            AND c1.NoClient = Cl.NoClient
                    GROUP BY NoArt  
                    HAVING COUNT(De.NoArt)>1  
 
       )
and    ar.NoArt in (
 
                    SELECT DISTINCT De.NoArt
                    FROM    détailCmde AS De,
                            commande AS Co,
                            client AS Cl ,
                            article AS AR  
                    WHERE   De.NoCmde=Co.NoCmde  
                            AND Cl.NoClient=Co.NoClient
                            AND Ar.NoArt=De.NoArt  
                            AND c2.NoClient = Cl.NoClient
                    GROUP BY NoArt  
                    HAVING COUNT(De.NoArt)>1  
 
       )
and c1.NoClient != c2.NoClient
 
GROUP BY ar.NoArt  
LIMIT 0, 30;


 
 
J'ai testé ta solution mais cela ne me donne aucun resultat.
 
Voila ce que j'ai reussi par faire:
 
SELECT Ar.NoArt,désignation  
   FROM  
      (SELECT DISTINCT NoArt,Co.NoClient FROM détailcmde As De , commande AS Co WHERE De.NoCmde=Co.NoCmde ) AS X,article As Ar      WHERE X.NoArt=Ar.NoArt GROUP BY NoArt HAVING COUNT(X.NoArt)>1  
 
 
Ce qui me donne:
 
Enregistrements: 5  
NoArt  désignation  
A2 Fraise
A3 Pomme
A4 Lamborghini
A5 Citron
A6 Poisson
 
En fait j'ai d'abord trié les articles par client et ensuite j'ai recherché ceux que j'avais au moins 2 fois,ca me semble juste ...


Message édité par cod57 le 31-05-2005 à 17:56:48
n°1104799
Toti2006
Posté le 02-06-2005 à 02:14:24  profilanswer
 

je veux seulement savoir le rôle de l'alias X que tu as fait d'aprés ce que j'ai compris X.NoArt ça ve dire le numéro d'article d'une commande qu'étais fait avec un client? c'est ça COD57 réponds moi si tu peux

n°1106095
cod57
Posté le 02-06-2005 à 20:44:04  profilanswer
 

Toti2006 a écrit :

je veux seulement savoir le rôle de l'alias X que tu as fait d'aprés ce que j'ai compris X.NoArt ça ve dire le numéro d'article d'une commande qu'étais fait avec un client? c'est ça COD57 réponds moi si tu peux


 
en fait l'alias me permet de selectionner les articles commandés par differents clients ce qui permet lors de commande multiple d'un meme produit par un meme client de ne pas le comptabiliser plusieur fois et apres je regarde dans cette table les produits commandé plusieurs fois.
 
Merci pour ton interé à mon probleme
 :hello:  

n°1108011
Toti2006
Posté le 04-06-2005 à 13:00:14  profilanswer
 

de rien COD57, et merci pour toi aussi


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

  Encore un probleme de requete SQL

 

Sujets relatifs
[Résolu] Problème ASP/SQL: erreur dans la requêteprobleme dans requete SQL
problème requete Sql avec variableprobleme de test sur une valeur sortie d'une requete SQL
[SQL] problème complexe de requêterequete sql probleme avec accent é
problème de syntaxe avec une requête SQLPetit probleme avec une requete SQL
Problème avec une requête SQL comprenant "in"[RESOLU] problème de condition sur un requête SQL
Plus de sujets relatifs à : Encore un probleme de requete SQL


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