Partage
  • Partager sur Facebook
  • Partager sur Twitter

Max d'une base de donnée

Sujet résolu
    22 mai 2007 à 17:13:39

    Bonjour,
    J'ai une base de donnée dans laquelle se trouve une colonne "utilisateur" et une autre "ville", je voudrai savoir quelle est la ville où il y a le plus d'utilisateurs.
    Y t'il un formule sql ou doit je compter séparement chaque ville ?
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2007 à 17:18:01

      SELECT ville,COUNT(utilisateur) FROM table GROUP BY ville

      une requete de ce style
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2007 à 17:26:36

        Oui ou même:

        mysql= ('SELECT "Ville" FROM "table" ORDER BY "utilisateur" DESC')

        Ca devrait le faire aussi.
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2007 à 17:35:24

          Je ne parviens pas à récupérer les donnée du classement avec ces requêtes ?
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2007 à 17:38:59

            Beh, indique nous à quoi ressemble ta table (nom des champs et type de valeurs).

            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2007 à 17:44:10

              Je posséde une table nommée "utilisateurs" avec un champ "nom","prenom","ville"... et je voudrai pouvoir compter le nombre d'utilisateurs de chaque ville.
              par exemple
              Ville1 : 20 membres
              Ville2 : 14 membres
              ...
              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2007 à 18:01:22

                SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville;
                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2007 à 19:24:13

                  Ouep c'est exactement ça... :lol:

                  Sinon j'ai une autre solution mais un peu plus longue (je te dis ça parce que je me suis embêter pour la trouver ;) )

                  A +
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 mai 2007 à 0:33:37

                    Citation : strucky

                    SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville;


                    Pourquoi faire un COUNT(*) ca prend des ressources pour rien
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mai 2007 à 0:38:14

                      Citation : lOeil

                      Citation : strucky

                      SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville;



                      Pourquoi faire un COUNT(*) ca prend des ressources pour rien



                      oui fait plutot :

                      SELECT ville, COUNT(1) nb_utilisateur FROM utilisateurs GROUP BY ville;
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mai 2007 à 8:30:22

                        Citation : lOeil

                        Citation : strucky

                        SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville;



                        Pourquoi faire un COUNT(*) ca prend des ressources pour rien



                        Ah ...

                        Et tu proposes quoi d'autres pour compter ?


                        f-webconcept, n'importe quoi ton code :-°
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 mai 2007 à 8:46:07

                          Citation : strucky

                          SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville;

                          Manque pas un as avant nb_utilisateur :-° ?? C'est clair qu'il y deux codes compléteent absurdes sur cette page, trouvez les!!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 mai 2007 à 9:19:56

                            J'ai pourtant mis AS mais cela ne fonctionne pas..
                            SELECT ville, COUNT(*) AS nb_utilisateur FROM utilisateurs GROUP BY ville
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mai 2007 à 9:31:29

                              strucky, je te garanti que remplacer le (*) par (1), car fonctionne et que ca économise des ressources.
                              j'ai appris ca sur les forums phpbb-fr.com et ca fait bien longtemps que tout mes code sont comme ca.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 mai 2007 à 9:37:00

                                Je viens de refaire le test et en effet cela fonctionne mais en fait cela ne me donne que le nombre max d'utilisateurs de cette ville je voudrai plutot une sorte de classement me permettant d'avoir le nom de la ville.
                                Comme par exemple :
                                1ere ville la plus representée : Ville1 : 50 utilisateurs
                                2eme ville la plus representée : Ville2 : 30 utilisateurs
                                ....
                                Je cherche mais je ne trouve pas de solution automatisée à ce problème...

                                Merci d'avance si vous pouvez m'éclairé
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 mai 2007 à 10:07:24

                                  Citation : f-webconcept

                                  strucky, je te garanti que remplacer le (*) par (1), car fonctionne et que ca économise des ressources.
                                  j'ai appris ca sur les forums phpbb-fr.com et ca fait bien longtemps que tout mes code sont comme ca.



                                  Mais c'est quand même n'importe quoi, je vois pas en quoi mettre 1 optimise quelque chose.

                                  Le COUNT(*), c'est lui qui est optimisé, ton COUNT(1) veut strictement rien dire...

                                  fred2708, ORDER BY.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 mai 2007 à 10:14:10

                                    Merci mais cela ne me permet pas d'avoir le nombre et la ville en même temps ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 mai 2007 à 11:00:46

                                      Si.

                                      $i=1;
                                      $sql = mysql_query("SELECT ville, COUNT(*) AS nb_utilisateur FROM utilisateurs GROUP BY ville ORDER BY nb_utilisateur DESC");
                                      while ($array=mysql_fetch_assoc($sql)){
                                          echo $i.') '.$array['ville'].' : '.$array['nb_utilisateur'].' habitants<br />';
                                          $i++;
                                      }
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 mai 2007 à 11:23:26

                                        Merci, c'est trop fort, c'est exactement ce que je cherche. :):)
                                        Merci à tous pour ces réponses.

                                        Par contre au vu des différents avis il faut mettre COUNT(*) ou COUNT(1) ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 mai 2007 à 11:26:02

                                          Aucune différence notable, à mon avis.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 mai 2007 à 11:38:01

                                            Ok et merci encore pour cette solution :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 mai 2007 à 13:18:19

                                              Pour info le AS n'est pas obligatoire dans:


                                              mysql_query("SELECT ville, COUNT(*) AS nb_utilisateur FROM utilisateurs GROUP BY ville ORDER BY nb_utilisateur DESC");



                                              mysql_query("SELECT ville, COUNT(*) nb_utilisateur FROM utilisateurs GROUP BY ville ORDER BY nb_utilisateur DESC");

                                              Réagit de la même façon je l'ai testé.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                23 mai 2007 à 14:22:36

                                                Tout à fait, je viens de tester et cela me donne le même résultat.
                                                Merci pour l'info
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 mai 2007 à 12:42:01

                                                  Désolé de remettre ça sur le "feu" mais je pense que

                                                  SELECT COUNT(1) signifie compte le nombre de lignes pour la colonne 1 de ta table (au lieu de compter toutes les lignes même si certaines colonnes sont vides), donc cela peut être intéressant selon le cas mais encore faut il être sûr que la colonne 1 sera toujours rempli (mettre id par exemple)...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 mai 2007 à 13:23:29

                                                    Cela reviendrait donc au même si ma première collone est "id" et permetrait donc d'utilisé moins de resources ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 mai 2007 à 13:36:40

                                                      Pour un count(), ça change rien. En fait, si tu fais un count sur un champ précis, si l'une des valeurs est égale à "null", alors la ligne n'est pas comptée. Si tu fais un count(*), alors tout sera compté (Sauf peut-être si tous les champs sont vides pour une ligne...)

                                                      Si tu fais un Count(id), t'es tranquille : Toujours rempli, et peu de valeurs à tester. Mais je doute que count(*) vérifie tous les champs de toutes les lignes 1 par 1... Je doute donc que la différence de vitesse se fasse sentir.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        25 mai 2007 à 12:57:21

                                                        Pour la vitesse j'ai des doutes aussi...

                                                        PS: si tout tes champs sont vides tu n'a pas de ligne... ;)
                                                        Et il te comptera effectivement zéro.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Max d'une base de donnée

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown