JeuWeb - Crée ton jeu par navigateur
[réglé] [SQL] nombre de résultats != suite à un GROUP BY - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [réglé] [SQL] nombre de résultats != suite à un GROUP BY (/showthread.php?tid=3481)



[réglé] [SQL] nombre de résultats != suite à un GROUP BY - Raoull - 28-12-2008

Salut,
je dois me remettre au SQL et j'ai tout oublié... et là je trouve pas la solution simple.

Voilà, j'ai une requète assez simple, du genre :

Code :
SELECT count(id) AS nb, masque FROM XXX GROUP BY masque ORDER BY nb DESC

ce qui me donne des stats simples, du genre :

Code :
masque 3 : 21
masque 1 : 15
masque 2 : 5

Ce que je voudrais savoir, c'est le nombre de résultats différents suite à cette clause GROUP BY. Là dans mon exemple, j'ai donc 3 masques différents.

Merci de votre aide


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Raoull - 28-12-2008

mm en fait un simple mysql_numrows devrait faire l'affaire !
mais vu que je passe ca à un systeme de pagination, et que d'hab j'utilise un count(id), j'étais perdu avec ce group by là...

Je viens d'avoir cette éclair de génie, c aussi bete que ca ... et personne ne me l'a dit avant !


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Argorate - 29-12-2008

Bonjour,

je ne sais pas si c'est ça le probleme, mais un count(nom d'un champ) cela ne se fait JAMAIS (seul exception, si il y a un "distinct" devant), sinon pour compter le nombre de tuples (enregistrements) : COUNT(*)

Sinon le mysql_numrows() fait aussi l'affaire effectivement, mais si tu peux l'éviter, c'est tjs ça de prit pour optimiser. Smile

bonne chance.


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Raoull - 29-12-2008

mm tu as surement raison pour le COUNT(*), car je suis loin d'avoir fait mes armes en SQL, et à la base j'ai plutot tendance à croire qu'indiquer un seul champs au lieu de tous (*) est toujours plus optimisé. Un peu comme un "SELECT id, truc" au lieu de "SELECT *" si ya 50 autres champs à coté.

Mais bon ca regle pas mon souci la en fait.
Si je veux savoir le nombre de ligne de resultat, je suis bien obligé de faire un numrows(). Je pensais, mais je ne crois plus maintenant, qu'il y'avait une solution en SQL direct dans la requete.


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Argorate - 29-12-2008

Tu sais mon prof d'informatique me l'as bien assez répété, COUNT() ça compte des tuples, pas des valeur de colones comme le fait SUM(), ça compte des ligne entiere, il est donc inutile de préciser le nom d'un champs, le seul cas où ça peut etre utile, c'est si tu veux par exemple savoir le nombre de salaire different de tes employes (exemple au pif), dans ce cas la tu dis: COUNT(distinct salaire), et là cela a du sens, il prend une ligne, et il dit : "j'incrémente mon compteur si et seuleument si le montant du salaire contenu dans le champs "salaire" est different de ceux que j'ai deja rencontré..."

Essai d'executer dans myadmin la requete avec un COUNT(*) pour voir si ça marche...


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - wild-D - 29-12-2008

count() compte le nombre de tuple non NULL^^ donc count(*) ou count(monchamp) ne donnera pas le même résultat dans le cas ou monchamp contient des valeurs à NULL.


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Raoull - 29-12-2008

Mais je vous crois sur parole :p
Mais merci pour les précisions, effectivement je vais gaffe de corriger cette faute là partout où je l'ai faite, et de ne plus la reproduire.

J'ai déjà mis à COUNT(*) après ton intervention Argorate, et sur le site sur lequel je bosse actuellement, je vois pas de différence sur les résultats. Mais j'applique quand même Smile
Merci à vous


RE: [réglé] [SQL] nombre de résultats != suite à un GROUP BY - Argorate - 29-12-2008

wild-D: tu as peut etre raison pour la nuance sur le NULL/NOT NULL étant donnée que je n'ai jamais de table avec des champs où j'accepte le NULL, je me suis jamais posé la question Big Grin