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

PHP & Base de données Discussion :

COUNT sur deux tables


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut COUNT sur deux tables
    Bonjour,
    j'ai une table nommée 'article' avec deux colonne 'vente' et 'département'. Je fais la liste du nombre d'articles vendus par département à l'aide de cette requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    $sql = 'SELECT departement, COUNT(*) as total FROM article GROUP BY departement';
                    $query = mysqli_query($conn,$sql) or die;
    				while($tableau = mysqli_fetch_array($query)){
     
                        echo "<table> \n";
                        echo "<tr> \n";
                        echo "<tr> \n";
                        echo "<td>".$tableau["departement"]."</td> \n";
                        echo "<td>".$tableau["total"]."</td> \n";
                        echo "</tr> \n";
                        echo "</table> \n";
    				}
    Ca fonctionne sans problème. Mais j'aurais voulu afficher également les départements dont le nombre d'articles est 0. Pour ce faire je voudrais me servir d'une autre table nommée 'localisation' avec une colonne 'dpt' ou j'ai tout les départements.
    je pense qu'il faut faire une jointure, mais je ne sais pas trop comment faire.
    Pour résumer je voudrais la liste de tout les départements avec le nombre d'articles vendus même si certain départements n'ont aucune ventes.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 364
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 364
    Billets dans le blog
    17
    Par défaut
    Il faut faire une jointure externe.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL l.dpt, COUNT(*) as total
    FROM localisation AS l
    LEFT OUTER JOIN article AS a ON l.dpt = a.departement
    GROUP BY 1
    ORDER BY 1 ASC
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Merci pour la réponse.
    J'ai mis la requête,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = 'SELECT ALL l.dpt, COUNT(*) as total FROM localisation AS l LEFT OUTER JOIN article AS a GROUP BY 1 ORDER BY 1 ASC';
                    $query = mysqli_query($conn,$sql) or die;
    				while($tableau = mysqli_fetch_array($query)){
     
                        echo "<table> \n";
                        echo "<tr> \n";
                        echo "<tr> \n";
                        echo "<td>".$tableau["1"]."</td> \n";
                        echo "<td>".$tableau["total"]."</td> \n";
                        echo "</tr> \n";
                        echo "</table> \n";
    				}
    Mais j'ai une erreur SQL_Syntax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Fatal error: Uncaught mysqli_sql_exception: 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 1 ORDER BY 1 ASC' at line 1 in
     
    mysqli_query(Object(mysqli), 'SELECT ALL l.dp...')

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    $sql = 'SELECT ALL l.dpt, COUNT(*) as total FROM localisation AS l LEFT OUTER JOIN article AS a ON a.departement GROUP BY 1 ORDER BY 1 ASC';
                    $query = mysqli_query($conn,$sql) or die;
    				while($tableau = mysqli_fetch_array($query)){
     
                        echo "<table> \n";
                        echo "<tr> \n";
                        echo "<tr> \n";
                        echo "<td>".$tableau["dpt"]."</td> \n";
                        echo "<td>".$tableau["total"]."</td> \n";
                        echo "</tr> \n";
                        echo "</table> \n";
    				}
    J'ai ajouter à la requête, tous les département s'affichent mais avec la valeur 1. D'après ce que je peux comprendre, le COUNT ne se fait pas.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 364
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 364
    Billets dans le blog
    17
    Par défaut
    J'avais oublié le critère de jointure.

    Je l'ai ajouté.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL l.dpt, COUNT(*) as total
    FROM localisation AS l
    LEFT OUTER JOIN article AS a ON l.dpt = a.departement
    GROUP BY 1
    ORDER BY 1 ASC
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    $sql = 'SELECT ALL l.dpt, COUNT(*) as total FROM localisation AS l LEFT OUTER JOIN article AS a ON 1.dpt = a.departement GROUP BY 1 ORDER BY 1 ASC';
                    $query = mysqli_query($conn,$sql) or die;
    				while($tableau = mysqli_fetch_array($query)){
     
                        echo "<table> \n";
                        echo "<tr> \n";
                        echo "<tr> \n";
                        echo "<td>".$tableau["dpt"]."</td> \n";
                        echo "<td>".$tableau["total"]."</td> \n";
                        echo "</tr> \n";
                        echo "</table> \n";
    				}
    J'ai toujours une erreur de SQL_syntax

    Fatal error: Uncaught mysqli_sql_exception: 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 'dpt = a.departement GROUP BY 1 ORDER BY 1 ASC' at line 1
    mysqli_query(Object(mysqli), 'SELECT ALL l.dp...') #1 {main} thrown in
    Je ne comprends pas, je ne vois d'où vient l'erreur.

  7. #7
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 472
    Par défaut
    Confusion entre les caractères l et 1 :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ON 1.dpt = a.departement
    -- à corriger en :
    ON l.dpt = a.departement

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    $sql = 'SELECT ALL l.dpt, COUNT(*) as total FROM localisation AS l LEFT OUTER JOIN article AS a ON l.dpt = a.departement GROUP BY 1 ORDER BY 1 ASC';
                    $query = mysqli_query($conn,$sql) or die;
    				while($tableau = mysqli_fetch_array($query)){
     
                        echo "<table> \n";
                        echo "<tr> \n";
                        echo "<tr> \n";
                        echo "<td>".$tableau["dpt"]."</td> \n";
                        echo "<td>".$tableau["total"]."</td> \n";
                        echo "</tr> \n";
                        echo "</table> \n";
    				}
    Requête modifier, plus d'erreurs, tous les départements s'affichent mais ils ont tous la valeur 1. On dirait que le COUNT ne fonctionne pas ou je ne sais pas

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Citation Envoyé par Pytet Voir le message
    Confusion entre les caractères l et 1 :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ON 1.dpt = a.departement
    -- à corriger en :
    ON l.dpt = a.departement
    C'est quoi la différence entre les deux, j'ai un peu de mal à comprendre

  10. #10
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 472
    Par défaut
    Il s'agit de l'alias de table déclaré dans la clause FROM :
    https://sql.sh/cours/alias

Discussions similaires

  1. Requête sur deux tables avec fonction COUNT
    Par islande dans le forum Langage SQL
    Réponses: 13
    Dernier message: 12/08/2013, 17h06
  2. Requete avec deux count sur 3 tables
    Par patoupatou34 dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/08/2009, 09h57
  3. COUNT/JOIN sur deux tables
    Par rozwel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/08/2008, 18h27
  4. requête count sur deux tables
    Par psychoBob dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/06/2006, 16h12
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 17h53

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