Encore un probleme de requete SQL

Encore un probleme de requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 31-05-2005 à 13:30:56    

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

Reply

Marsh Posté le 31-05-2005 à 13:30:56   

Reply

Marsh Posté le 31-05-2005 à 15:18:58    

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

Reply

Marsh Posté le 31-05-2005 à 15:25:59    

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...

Reply

Marsh Posté le 31-05-2005 à 15:30:06    

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!

Reply

Marsh Posté le 31-05-2005 à 15:47:10    

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

Reply

Marsh Posté le 31-05-2005 à 16:56:50    

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;

Reply

Marsh Posté le 31-05-2005 à 17:55:27    

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
Reply

Marsh Posté le 02-06-2005 à 02:14:24    

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

Reply

Marsh Posté le 02-06-2005 à 20:44:04    

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:  

Reply

Marsh Posté le 04-06-2005 à 13:00:14    

de rien COD57, et merci pour toi aussi

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed