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 :

compter le nombre d'elements dans différentes colonnes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut compter le nombre d'elements dans différentes colonnes
    Salut,
    J'aimerais savoir s'il était possible en une requête (ou moins de requêtes possible)de connaitre le nombre d'éléments identiques d'une table se trouvant dans des colonnes différentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    exemple: d'une table elements avec les colonnes c1,c2,c3,c4
                     c1       c2       c3     c4
                     a         c         b      null
                     c         a         a       b
                     b        null       null    null
                     d        b          a      null
    Pour connaitre le nombre de "a" dans c1 je peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req="select count(c1) from elements where c1='a'";
    Pour connaitre le nombre total de "a" je suis obligé de faire la même requete pour les autres colonnes et ensuite faire une somme(et si je dois le faire tous les éléments çà fait 16 requêtes au total).
    Est-ce qu'il ne serait pas possible de le faire en une ou moins de requêtes?
    Merci

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    tu peux faire quelque chose dans ce genre mais c'est assez long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select count(nb) from
    (select 1 as nb from element where c1='a'
    union all
    select 1 from element where c2='a'
    union all ...
    )tmp

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Excuse-moi, je ne maitrise pas bien le sql. Je n'ai pas compris certains paramètres de la requête. Que signifie le "1" dans les SELECT et le "tmp" après la parenthèse.Sinon la requête ne me donne rien.

  4. #4
    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
    Il suffit de tout remettre dans une seule colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT val, COUNT(*)
    FROM (
    SELECT c1 AS val FROM elements 
    UNION ALL
    SELECT c2 FROM elements
    UNION ALL
    SELECT c3 FROM elements
    UNION ALL
    SELECT c4 FROM elements
    ) AS U
    GROUP BY val
    Ceci dit, cela révèle sans doute une erreur de modélisation dans ta base.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Merci, ca marche mais j'ai un problème, sans vouloir abuser.
    J'ai exécuter la requête dans phpmyadmin pour voir le resultat.En fait doit utiliser la requête dans du php.Comment ignorer les valeurs null?
    J'ai besoin de récupérer les différentes valeurs mais je ne sais pas comment faire.val et count(*) sont des colonnes temporaires et je ne sais quel est le nom de la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     val          COUNT(*)
    NULL 	        4
    a       	4
    b	        4
    c	        2
    d              1
    Merci

  6. #6
    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
    Le nom de la "table" est U (fixé par le AS U juste après la sous-requête). Pour récupérer le COUNT(*), il suffit de lui mettre un alias (Nb dans l'exemple ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT val, COUNT(*) AS nb
    FROM (
    SELECT c1 AS val FROM elements 
    UNION ALL
    SELECT c2 FROM elements
    UNION ALL
    SELECT c3 FROM elements
    UNION ALL
    SELECT c4 FROM elements
    ) AS U
    WHERE val IS NOT NULL
    GROUP BY val

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Merci pour la requête, elle marche mais je n'arrive toujours pas ou plutôt je ne sais toujours pas comment récupérer les valeurs de la colonne "nb".
    J'ai fais çà:
    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
     
     
    $req="SELECT val, COUNT(*) AS nb
    FROM (
    SELECT c1 AS val FROM elements 
    UNION ALL
    SELECT c2 FROM elements
    UNION ALL
    SELECT c3 FROM elements
    UNION ALL
    SELECT c4 FROM elements
    ) AS U
    WHERE val IS NOT NULL
    GROUP BY val";
    $res=mysql_query($req);
     
    $req2="select nb from U";
    $res2=mysql_query($req2);
    if(mysql_num_rows($res2)>0)
     {
      $tab=mysql_fetch_array($res2);
      echo $tab[2];
     }
    Je crois que dans la deuxième requête la table U n'est pas reconnue.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pourquoi faire deux requêtes quand une seule suffit !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $res=mysql_query($req);
     
    IF(mysql_num_rows($res)>0)
    {
      while($tab=mysql_fetch_array($res))
      {
        echo $tab['val'] .'/'. $tab['nb']<br />;
      } // Fin while
    } // Fin if

  9. #9
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    C'est bon çà marche.eMerci à tous.

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

Discussions similaires

  1. Compter le nombre de 1 dans une colonne
    Par paiva44 dans le forum Débutez
    Réponses: 2
    Dernier message: 28/01/2010, 18h33
  2. compter le nombre d'element dans une page
    Par the-destroyer dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/10/2009, 19h24
  3. [MySQL] Compter le nombre d'entrées dans une colonne
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/07/2009, 22h09
  4. Réponses: 6
    Dernier message: 04/11/2008, 22h35
  5. Compter un nombre de date dans une colonne
    Par MASK55 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/11/2007, 11h17

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