[RESOLU] Boucle SUM a cause de LEFT JOIN

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Boucle SUM a cause de LEFT JOIN

Re: [RESOLU] Boucle SUM a cause de LEFT JOIN

par Ascla » 14 déc. 2015, 22:44

Ah je n'ai vraiment pas l'habitude de faire des requêtes de ce genre. :lol:

Bonne soirée.

Re: Boucle SUM a cause de LEFT JOIN

par moimeme34 » 14 déc. 2015, 21:43

Merci Ascla, mais j'ai eu une autre proposition qui me parait plus pertinente.
Pour ceux que ca pourrai aider:

Code : Tout sélectionner

SELECT s.*, GROUP_CONCAT(nom_fichier) AS fichiers FROM (SELECT c.id_commande, c.ref_commande, SUM(cd.prix_ht * (1+(cd.tx_tva/100))) as ttc FROM commande c INNER JOIN commande_prod cd USING(id_commande) WHERE c.id_client=44 GROUP BY c.id_commande ) s LEFT JOIN piece_jointe pj ON s.id_commande=pj.id_comm GROUP BY s.id_commande
Bonne soirée

Re: Boucle SUM a cause de LEFT JOIN

par Ascla » 14 déc. 2015, 21:04

Bonjour,
Dans le cas où il existerait plusieurs pièces jointes pour une commande, je pense qu'il faudrait le faire en 2 requêtes.
Sinon, ça ressemblerait plus à ça :
SELECT Sum(prix_ht) somme,
       nom_fichier  piece
FROM   commande c,
       commande_prod cp,
       piece_jointe p
WHERE  c.id_commande = cp.id_commande
       AND c.id_commande = p.id_comm
GROUP  BY c.id_commande;
Je suis sans doute pas le meilleur en requête mais c'est ce qui me semble le plus simple. À vérifier !

Boucle SUM a cause de LEFT JOIN

par moimeme34 » 14 déc. 2015, 20:37

Bonjour,

J'ai 3 tables.

Code : Tout sélectionner

commande: id_commande, id_client, ref_commande....../*comprend les infos et références de la commande.*/ commande_prod: id_commande_prod, id_commande, id_produit, tx_tva, prix_ht..../*comprend les produits et prix de commandes. (id_commande est utilisé pour la jointure)*/ piece_jointe: id_pj, id_comm, nom_fichier..../*peut contenir ou non des pièces jointes*/
Je cherche à afficher la somme totale par commande et afficher les pièces jointes ensembles si elles existent.

Mon code actuel:

Code : Tout sélectionner

SELECT DISTINCT c.ref_commande, SUM(cd.prix_ht * (1+(cd.tx_tva/100))) as ttc, GROUP_CONCAT(DISTINCT pj.nom_fichier)AS fichier FROM commande c INNER JOIN commande_prod cd USING(id_commande) LEFT JOIN piece_jointe pj ON c.id_commande=pj.id_comm WHERE c.id_client=44 GROUP BY c.id_commande
Ça fonctionne presque. Mon problème est que la somme est calculée autant de fois qu'il y a de pièces jointes.

Une idée svp?