IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Somme de quantité selon le produit


Sujet :

MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut Somme de quantité selon le produit
    Bonjour,

    j'ai 3 tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    -- Contenu de la table `commandes`
    INSERT INTO `commandes` (`idCom`, `designation`, `quantite`, `section`, `idUser`) VALUES
    (1, 'Julienne de légumes', 3, 'Adultes', 1),
    (2, 'Côte de porc', 5, 'Bac Pro', 1),
    (3, 'faux-filet', 8, 'BEP', 1),
    (6, 'Côte de porc', 3, 'Adultes', 5),
    (7, 'Cuisse de volaille', 8, 'BP', 5),
    (8, 'Cuisse de volaille', 5, 'BEP', 1),
    (9, 'Opéra', 5, 'BP', 5);
    -- 
    -- Contenu de la table `produits`
    -- 
    INSERT INTO `produits` (`idPdts`, `designation`, `conditionnement`, `idFrs`, `idCat`) VALUES
    (1, 'faux-filet', 'kilo(s)', 1, 1),
    (9, 'Côte de porc', 'kilo(s)', 1, 1),
    (15, 'Cuisse de volaille', 'kilo(s)', 1, 1),
    (18, 'Opéra', 'kilo(s)', 2, 2),
    (20, 'Julienne de légumes', 'kilo(s)', 2, 3);
    -- 
    -- Contenu de la table `fournisseurs`
    -- 
    INSERT INTO `fournisseurs` (`idFrs`, `raisonSociale`, etc) VALUES
    (1, 'Berry viandes', etc) //je ne mets pas l'ensemble des données, seules les deux premières m'intéressent
    Ce que je cherche à faire, c'est d'afficher d'une part le produit (designation) une seule fois et d'autre part la somme des quantités concernant ce produit, chose que j'ai réussi à faire je pense en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `designation` , SUM( `quantite` ) FROM commandes GROUP BY `designation`
    Ce qui donne:
    designation SUM( `quantite` )
    Côte de porc 8
    Cuisse de volaille 13
    faux-filet 8
    Julienne de légumes 3
    Opéra 5
    Toutefois, il me manque le conditionnement du produit à afficher à côté de la quantité, mais surtout, j'ai besoin également de filtrer les produits par fournisseur. J'ai affiché l'ensemble des informations en écrivant par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT commandes.designation, quantite, produits.designation, 
      conditionnement, produits.idFrs, fournisseurs.idFrs, raisonSociale 
    FROM commandes 
      JOIN produits 
      JOIN fournisseurs ON commandes.designation = produits.designation 
         AND produits.idFrs = fournisseurs.idFrs 
         AND fournisseurs.idFrs = 1
    Ce qui donne:
    Côte de porc 5 kilo(s)
    faux-filet 8 kilo(s)
    Côte de porc 3 kilo(s)
    Cuisse de volaille 8 kilo(s)
    Cuisse de volaille 5 kilo(s)
    Le résultat est correct, mais j'ai deux produits qui s'affichent deux fois, et je dois pouvoir lire la somme des quantités se rapportant à chacun de ces produits.
    Comment concilier ces deux requêtes ?
    merci,

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Tu as oublié le GROUP BY. Voici, en réécrivant tes jointures proprement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT produits.designation, SUM(quantite), produits.conditionnement 
    FROM commandes 
      INNER JOIN produits ON commandes.designation = produits.designation
      INNER JOIN fournisseurs ON produits.idFrs = fournisseurs.idFrs 
    WHERE fournisseurs.idFrs = 1
    GROUP BY produits.designation, produits.conditionnement
    Par ailleurs, tu devrais normaliser ta table commande en y remplaçant la colonne designation par l'idPdts.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut re:
    Merci bien Antoun!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut re:
    J'ai oublié de demander pourquoi j'ai maintenant un "nouveau champ 'SUM(quantité)'. C'est comme cela que je suis obligé de l'écrire pour pouvoir afficher le champ quantité (ainsi que le fait phpMyAdmin d'ailleurs...)
    merci,

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Il faut mettre un alias au champ SUM(quantite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT produits.designation, SUM(quantite) AS quantite, produits.conditionnement 
    FROM commandes 
      INNER JOIN produits ON commandes.designation = produits.designation
      INNER JOIN fournisseurs ON produits.idFrs = fournisseurs.idFrs 
    WHERE fournisseurs.idFrs = 1
    GROUP BY produits.designation, produits.conditionnement
    ced

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Points : 92
    Points
    92
    Par défaut re:
    Ok, merci pour la précision...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Somme de quantité d'un produit en php a partir d'une table
    Par Hatem761 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/03/2012, 09h43
  2. Réponses: 2
    Dernier message: 04/09/2009, 19h26
  3. Requete avec Somme de Quantité qui me coince depuis 1 semaine
    Par andrew0val dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/08/2006, 08h46
  4. Réponses: 21
    Dernier message: 01/08/2006, 20h44
  5. Modifier la quantité d'un produit dans un panier
    Par budiste dans le forum Langage
    Réponses: 22
    Dernier message: 14/02/2006, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo