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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete Mysql complexe sur 3 tables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete Mysql complexe sur 3 tables

n°2233912
alex-fly
Posté le 23-07-2014 à 16:26:01  profilanswer
 

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 !! :)  

mood
Publicité
Posté le 23-07-2014 à 16:26:01  profilanswer
 

n°2233913
ddr555
Posté le 23-07-2014 à 16:35:57  profilanswer
 

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

n°2233920
alex-fly
Posté le 23-07-2014 à 17:37:48  profilanswer
 

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 !

n°2233924
dreameddea​th
Posté le 23-07-2014 à 18:59:50  profilanswer
 

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

n°2233958
ddr555
Posté le 24-07-2014 à 09:17:07  profilanswer
 

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

n°2234412
alex-fly
Posté le 29-07-2014 à 17:18:42  profilanswer
 

Merci beaucoup dreameddeath!


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

  Requete Mysql complexe sur 3 tables

 

Sujets relatifs
SWITCH + MYSQL[Réglé] [SQL] Une jointure avec le résultat de la requete
vb et mysql, requête parametresMySQL : aide pour une requête
Récuperer des lignes dans un ordre précis avec une seule requête[MySQL] LOOP
Oracle - Requête SQL outer joinMySQL : 1h pour une requête avec un NOT IN, conseils pour optimiser ?
Plus de sujets relatifs à : Requete Mysql complexe sur 3 tables


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