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 :

Qu'est-ce qui n'est pas bon dans cette requète ?


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut Qu'est-ce qui n'est pas bon dans cette requète ?
    Bonsoir tout le monde.

    J'ai beau chercher chez mon ami Google, je ne comprends pas...

    Voici la chose :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      $req="SELECT Sous_Compte AS SC, count(*) AS NB 
            FROM Ecritures 
            GROUP_BY SC
            WHERE Compte=$Compte;";
    Je ne vois rien de spécial à dire sur le reste du code. Compte et Sous_Compte sont des tinyInt. Voici le message d'erreur :
    Message d'erreur: SELECT SC, NB

    Message base de données : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SC WHERE Compte=0' at line 3 (Errno: 1064)

    Défaut requête : SELECT Sous_Compte AS SC, count(*) AS NB FROM Ecritures GROUP_BY SC WHERE Compte=0;
    Merci à ceux qui pourront m'aider...

    AMIcalement.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    La clause WHERE doit être placée avant le GROUP BY.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Merci de répondre.

    C'est (évidemment ?) la première chose que j'avais écrite, mais ça ne marche pas non plus :

    Message d'erreur: SELECT SC, NB

    Message base de données : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_BY SC' at line 4 (Errno: 1064)

    Défaut requête : SELECT Sous_Compte AS SC, count(*) AS NB FROM Ecritures WHERE Compte=0 GROUP_BY SC;
    Après plusieurs essais, voici la requête qui marche :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      $req="SELECT Sous_Compte as SC, count(*) AS NB 
            FROM Ecritures WHERE Compte=$Compte
            GROUP BY SC;";
    J'avais pourtant trouvé chez mon pote Google un exemple (dans un tuto) où j'avais juste rajouté ma clause "WHERE", mais où il y avait bel et bien écrit "GROUP_BY".

    En plus, les messages d'erreur de MySQL ne sont pas toujours très explicites...

    Mais c'est résolu : merci à ceux qui m'ont lu, et à toi, CosmoKnacki, qui m'as répondu.

    AMIcalement.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    En fait, ma requète marche maintenant comme MySQL doit marcher, mais ça ne répond pas encore totalement à mon besoin (qui est de savoir combien de fois (même si c'est zéro) chaque combinaison de Compte et Sous_Compte est utilisée dans la table Ecritures). Voici mon code exact :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($comptes as $Compte=>$c)
    {
      $req="SELECT Sous_Compte as SC, SUM(IF(Sous_Compte IS NULL, 0, 1)) AS NB 
            FROM Ecritures WHERE Compte=$Compte
            GROUP BY SC;";
      $r=$db->query($req)
                 or error('SELECT SC, NB', __FILE__, __LINE__, $db->error());
      while ($Ligne=$db->fetch_array($r))
        $NB= (array_key_exists('NB',$Ligne))?$Ligne['NB']:0;
      $db->free_result($r);
    }
    J'ai modifié (merci Google) la requète pour inclure la cas où Sous_Compte est NULL, là, c'est bon, mais pour $NB, dans l'avant-dernière ligne, là où je devrais avoir $NB=0, je n'ai rien...

    J'ai aussi essayé avec isset($Ligne['NB']), c'est pareil.

    Ça me laisse complètement perplexe.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    GROUP_BY écrit avec un underscore, ça pourrait être un nom de colonne ou de fonction, dans tous les cas une idée farfelue

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Pour compter le nombre de fois où apparait chaque combinaison de compte/sous-compte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select compte
         , sous_compte
         , count(*)
    from ma_table
    group by compte
            , sous_compte

  7. #7
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Merci, Escartefigue.

    Je vais essayer, mais ça me fendrait le cœur que ta solution passe sous silence les cas où Sous_Compte serait NULL, et/ou les cas où une combinaison Compte/Sous_Compte (eventuellement avec Sous_Compte NULL) ne soit pas utilisée dans la table.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Pour avoir également les manquants il faut disposer d'une table dans laquelle on trouve tous les comptes et/ou sous-comptes existants et faire une jointure OUTER de cette table vers la votre

    Par exemple, avec les tables suivantes (TAB1 : liste des comptes, TAB2 : comptes, sous-comptes et montants)
    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
    with Tab1(cpt) as
        (select 001 union all
         select 002 union all
         select 003 union all
         select 004 union all
         select 005
        )
       , Tab2(cpt, sct, mnt) as
        (select 001, 001, 500.00 union all
         select 001, 010, 220.50 union all
         select 001, 001, 300.00 union all
         select 001, 002, 130.07 union all
         select 001, 001, 100.00 union all
         select 003, 010, 333.00 union all
         select 003, 010, 444.00 union all
         select 003, 020, 777.00 union all
         select 003, 010, 111.00 union all
         select 004, 002, 044.44 union all
         select 004, 002, 011.22
        )
    Cette requête donne le résultat y compris pour les comptes de Tab1 sans montant dans Tab2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select tab1.cpt
         , tab2.sct
         , sum(tab2.mnt) as somme
         , count(*)      as nb1
         , sum(case when tab2.sct is null then 0 else 1 end) as nb2
    from tab1
    left join tab2
      on tab2.cpt = tab1.cpt
    group by tab1.cpt
           , tab2.sct
    order by tab1.cpt
           , tab2.sct
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cpt 	sct 	somme 	nb1 	nb2
    1 	1 	900.00 	3 	3
    1 	2 	130.07 	1 	1
    1 	10 	220.50 	1 	1
    2 			1 	0
    3 	10 	888.00 	3 	3
    3 	20 	777.00 	1 	1
    4 	2 	55.66 	2 	2
    5 			1 	0

  9. #9
    Membre habitué
    Inscrit en
    Mai 2009
    Messages
    514
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 514
    Points : 131
    Points
    131
    Par défaut
    Merci, Escartefigue, tu m'en bouches un coin ! Ça marche !

    Merci aussi à tous les autres, et à bientôt :o)

    AMIcalement.

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

Discussions similaires

  1. Lien RSS du forum access qui n'est pas bon
    Par Gabrieel dans le forum Access
    Réponses: 1
    Dernier message: 25/10/2016, 09h04
  2. Réponses: 0
    Dernier message: 19/05/2011, 13h34
  3. [EasyPHP] Installation de JavaBridge : mon phpinfo() n'est pas bon
    Par schwarzy2 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 19/10/2008, 08h25
  4. [Newbie] Qu'est-ce qui ne va pas dans cette requête ?…
    Par Mister Paul dans le forum Langage SQL
    Réponses: 20
    Dernier message: 18/09/2007, 15h19
  5. sql-serveur : qu'est-ce qui ne va pas dans cette requête ?
    Par isachat666 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/06/2006, 15h52

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