Requete Mysql complexe sur 3 tables

Requete Mysql complexe sur 3 tables - SQL/NoSQL - Programmation

Marsh Posté le 23-07-2014 à 16:26:01    

Bonjour,
 
J'utilise régulièrement le forum de hardware.fr et habituellement en fouillant dans les anciens postes,  je trouve systématiquement la réponse à mes questions mais aujourd'hui, ce n'est pas le cas. Je tiens à préciser que je suis un débutant en Mysql et que cette fois ci, je suis un peu paumé pour faire cette requête.
 
J'ai les trois tables avec les structures suivantes dans ma base de donnée avec des milliers de lignes et j'aimerai compter le nombre de numéro de commande unique dont le poids total de ses articles est compris entre 500 et 1000, avec une livraison en Europe (hors France) et dont le champ comptage produit =0 .
 
table "produits" :  
id | ref | poids
1 | A304 | 1225
2 | A234 | 675
...
 
table "commandes" :
id | order_id | code_pays_acheteur | ref_produits | quantite | comptage_poids
1 | 1566 | FR | A304 | 2 | 0
2 | 1566 | FR | A234 | 1 | 0
3 | 1673 | DE | A234 | 2 | 0
4 | 1673 | DE | A304 | 10 | 0
5 | 1794 | UK | A304 | 1 | 0
...
 
table "pays"
id | code_pays | zone_geographique
1 | FR | France
2 | DE | Europe
3 |UK | Europe
4 | US | Monde
...
 
Merci d'avance pour votre aide précieuse !! :)  

Reply

Marsh Posté le 23-07-2014 à 16:26:01   

Reply

Marsh Posté le 23-07-2014 à 16:35:57    

select count(C.id)
from commandes C
inner join produits P on ( C.ref_produits = P.id )
inner join pays PA on ( C.code_pays_acheteur = PA.id)
where C.comptage_poids = 0 -- ce qui semble être comptage produit dans ta demande
and PA.id <> 1
having sum(P.poids) between 500 and 1000
 
je ne connais pas la syntaxe précise de MySQL, mais ça s'adapte rapidement

Reply

Marsh Posté le 23-07-2014 à 17:37:48    

Merci beaucoup ddr555 pour tes lumières.
 
J'ai adapté la requete comme ceci :  
 
SELECT  COUNT(order_id)
FROM commandes AS c, pays AS p, produits AS prod
WHERE c.code_pays_acheteur = p.code_pays and c.ref_produits = prod.ref and comptage_poids=0 and quantite*poids<1000 and quantite*poids>500 and zone_geographique = "Europe"
 
Le problème est que je peux avoir des valeurs dans le champ order_id identiques. Je souhaiterais pouvoir regrouper et additionner les champs quantite * poids de toutes les order_id identiques et ainsi compter qu'une fois le poids global d'une commande ayant plusieurs articles.  
 
Comment faire ?
 
Merci d'avance !

Reply

Marsh Posté le 23-07-2014 à 18:59:50    

Le where n'est pas bon, c'est bien un having qu'il faut utiliser. Il manque aussi un group by qq part (order_id)
 
QQ chose comme ça devrait marcher je pense :  

Code :
  1. SELECT  order_id, SUM(prod.poids*c.quantite) as poids_total
  2. FROM commandes AS c, pays AS p, produits AS prod
  3. WHERE c.code_pays_acheteur = p.code_pays and c.ref_produits = prod.ref and comptage_poids=0 and zone_geographique = "Europe"
  4. group by order_id
  5. having poids_total > 500 and poids_total < 1000

Reply

Marsh Posté le 24-07-2014 à 09:17:07    

oui j'avais oublié le group by dans ma requête

Reply

Marsh Posté le 29-07-2014 à 17:18:42    

Merci beaucoup dreameddeath!

Reply

Sujets relatifs:

Leave a Replay

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