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

Requêtes MySQL Discussion :

Besoin d'aide pour requête SQL


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut Besoin d'aide pour requête SQL
    Bonjour tout le monde,

    Je n'arrive pas à faire une requête, alors avant de faire une requête bidon et d'effectuer le traitement dans mon appli, je voulais vous demander votre avis.

    J'ai une table dont voici une capture de sa structure :


    mon but est d'avoir un tableau à 3 colonnes avec

    id_employe | nbCartouchesCouleur | nbCartouchesNoir

    Je vous donne la dernière requête que j'ai essayé mais qui ne marche toujours pas pour vous donner une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT tbl1.id_employe, sum( tbl1.nb_cartouches ) AS nbNoir  ,sum( tbl2.nb_cartouches ) AS nbCoul
    FROM commande_imprimante AS tbl1, commande_imprimante AS tbl2
    WHERE tbl1.type_cartouche = 'noire'
    AND tbl2.type_cartouche NOT LIKE 'noire'
    AND tbl1.id_employe=tbl2.id_employe
    GROUP BY 1
    elle s'execute mais ne donne pas les bons résultats.

    merci d'avance !

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut...
    Est-ce que cette requête te convient ?

    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
    SELECT tbl.id_employe, IF(Noir.nb IS NOT NULL, Noir.nb, 0) AS NbNoir, IF(Couleur.nb IS NOT NULL, Couleur.nb, 0) AS NbCouleurs
    FROM commande_imprimante AS tbl
       LEFT JOIN (
          SELECT tblNoir.id_employe, SUM(tblNoir.nb_cartouches) AS nb
          FROM commande_imprimante AS tblNoir
          WHERE tblNoir.type_cartouche = 'noire'
          GROUP BY tblNoir.id_employe
       ) Noir
          ON tbl.id_employe = Noir.id_employe
       LEFT JOIN (
          SELECT tblCouleur.id_employe, SUM(tblCouleur.nb_cartouches) AS nb
          FROM commande_imprimante AS tblCouleur
          WHERE tblCouleur.type_cartouche = 'couleur'
          GROUP BY tblCouleur.id_employe
       ) Couleur
          ON tbl.id_employe = Couleur.id_employe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    Salut,


    j'ai cette erreur :

    #1054 - Champ 'tblCouleur.id_employe' inconnu dans group statement

    merci pour ton aide

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    erreur sur le GROUP BY de la première sous-requête, il faut mettre tblNoir au lieu de tblCouleur, erreur de copier/coller, désolé [ligne 8]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    j'ai réussi à l'executer en remplacant tblcouleur par tblnoir dans le premier left join :

    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
    SELECT tbl.id_employe, IF(Noir.nb IS NOT NULL, Noir.nb, 0) AS NbNoir, IF(Couleur.nb IS NOT NULL, Couleur.nb, 0) AS NbCouleurs
    FROM commande_imprimante AS tbl
       LEFT JOIN (
          SELECT tblNoir.id_employe, SUM(tblNoir.nb_cartouches) AS nb
          FROM commande_imprimante AS tblNoir
          WHERE tblNoir.type_cartouche = 'noire'
          GROUP BY tblNoir.id_employe
       ) Noir
          ON tbl.id_employe = Noir.id_employe
       LEFT JOIN (
          SELECT tblCouleur.id_employe, SUM(tblCouleur.nb_cartouches) AS nb
          FROM commande_imprimante AS tblCouleur
          WHERE NOT tblCouleur.type_cartouche = 'noire'
          GROUP BY tblCouleur.id_employe
       ) Couleur
          ON tbl.id_employe = Couleur.id_employe
    mais le resultat est bizarre, premièrement les entetes des colonnes 1 et 3 apparaissent sous forme de bouton dans phpmyadmin, et de plus, j'ai des doublons au niveau des id_employé (colonne 1)

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    les bouttons, ça doit êtr à cause des sous-requêtes...

    pour les doublons c'est surprenant, tu peux donner un exemple de set de doublons ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    voici un jeu d'essai :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    CREATE TABLE `commande_imprimante` (
      `no_commande` bigint(20) NOT NULL default '0',
      `no_imprimante` mediumint(9) NOT NULL default '0',
      `id_employe` bigint(20) NOT NULL default '0',
      `nb_cartouches` tinyint(4) NOT NULL default '0',
      `type_cartouche` varchar(40) NOT NULL default '',
      PRIMARY KEY  (`no_commande`,`no_imprimante`,`id_employe`,`type_cartouche`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `commande_imprimante`
    -- 
     
    INSERT INTO `commande_imprimante` VALUES (96, 7, 36, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (96, 7, 36, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (89, 4, 75, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (90, 4, 117, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (91, 1, 114, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (92, 4, 136, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (94, 1, 103, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (94, 1, 103, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (95, 3, 112, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (95, 3, 112, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (96, 7, 54, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (96, 7, 54, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (88, 1, 132, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (88, 1, 132, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (89, 4, 75, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (87, 1, 76, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (86, 8, 96, 3, 'noire');
    INSERT INTO `commande_imprimante` VALUES (83, 2, 35, 3, 'noire');
    INSERT INTO `commande_imprimante` VALUES (83, 2, 35, 3, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (85, 14, 130, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (85, 3, 105, 3, 'noire');
    INSERT INTO `commande_imprimante` VALUES (85, 2, 69, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (85, 2, 69, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (82, 3, 8, 3, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (82, 3, 8, 3, 'noire');
    INSERT INTO `commande_imprimante` VALUES (81, 14, 89, 3, 'noire');
    INSERT INTO `commande_imprimante` VALUES (80, 4, 86, 1, 'noire');
    INSERT INTO `commande_imprimante` VALUES (80, 4, 86, 1, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (74, 1, 131, 2, 'noire');
    INSERT INTO `commande_imprimante` VALUES (80, 2, 7, 2, 'couleur');
    INSERT INTO `commande_imprimante` VALUES (79, 4, 21, 1, 'noire');

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    vraiment bizarre... ça doit venir de la double jointure externe...

    prend ceci :
    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
    SELECT tbl.id_employe, MAX(IF(Noir.nb IS NOT NULL, Noir.nb, 0)) AS NbNoir, MAX(IF(Couleur.nb IS NOT NULL, Couleur.nb, 0)) AS NbCouleurs
    FROM commande_imprimante AS tbl
       LEFT JOIN (
          SELECT tblNoir.id_employe, SUM(tblNoir.nb_cartouches) AS nb
          FROM commande_imprimante AS tblNoir
          WHERE tblNoir.type_cartouche = 'noire'
          GROUP BY tblNoir.id_employe
       ) Noir
          ON tbl.id_employe = Noir.id_employe
       LEFT JOIN (
          SELECT tblCouleur.id_employe, SUM(tblCouleur.nb_cartouches) AS nb
          FROM commande_imprimante AS tblCouleur
          WHERE tblCouleur.type_cartouche = 'couleur'
          GROUP BY tblCouleur.id_employe
       ) Couleur
          ON tbl.id_employe = Couleur.id_employe
    GROUP BY tbl.id_employe

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    ca a l'air d'être nikel !

    tu pourrais m'éxpliquer la requête vite fait? je ne connais pas du tout le mécanisme du left join ni celui du IF même si je pense comprendre qu'il renvoi nb ou 0 si nb est nul c'est ca?

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    t'as tout compris pour le IF...

    pour le LEFT JOIN, c'est une jointure, je te renvoie vers le tuto de SQLpro qui est super bien fait à ce sujet : http://sql.developpez.com/sqlaz/jointures/

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Points : 316
    Points
    316
    Par défaut
    nikel encore merci pour le coup de main tu m'a bien depanné.

    bonne continuation

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

Discussions similaires

  1. Besoin d'aide pour requête SQL
    Par kaboume dans le forum Langage SQL
    Réponses: 22
    Dernier message: 04/07/2011, 16h11
  2. [SQL Server 2005] Besoin d'aide pour requête
    Par Definol dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/07/2007, 14h55
  3. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 19h20
  4. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 10h01

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