Vous n'êtes pas identifié(e).
Pages :: 1
Bonsoir,
Je n'arrive pas à écrire en une seule requête le COUNT sur 2 types d'information.
Je m'explique.
voici la table :
déjà, ne chercher que les idle=0
ensuite, mon résultat doit me sortir :
le nombre de user_id = 1
le nombre de user_id != 1
Pour ceux qui connaissent fluxBB, il s'agit de compter le nombre de membres connectés ainsi que les invités.
user_id = 1 : invité
user_id != 1 : membre
idle = 0 : connecté
idle = 1 : déconnecté
le résultat donnerait : 1 membre et 3 invités connectés
Je sens qu'il y a encore une histoire de SELECT imbriqués...
J'ai essayé, sans succès, plusieurs requêtes du genre :
et forcément, une fois de plus ça ne retourne pas le résultat escompté
Je pourrais très bien faire un SELECT tout bete, puis traiter tout ça dans un while, mais quand on peut faire travailler MySQL, pourquoi s'en priver
Merci à vous
Dernière modification par cramj (07-09-2010 19:24:08)
Hors ligne
Saluton,
Tu ne peux pas, dans le même GROUP BY compter une chose : user_id==1, et son contraire : user_id !=1.
Ta requête devrait donc plutôt ressembler à qqe chose comme ça :
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour et merci Maljuna Kris,
ça fonctionne à merveille.
Je me doutais bien qu'un seul GROUP BY ne suffisait pas, c'est pour ça que j'ai testé plusieurs requêtes avec 2. Mais quels champs grouper ? ... et comment lui faire comprendre les user_id à compter ? ... je faisais en effet mauvaise route avec ce casse tête !
Mais juste pour comprendre :
En voyant ta proposition, et avant d'essayer, je pensais que SUM allait additionner les valeurs.
Pour les invités, ok. Mais pour les membres : id 23 + id 40 = membres → 63
Quand j'ai vu que SUM retournait le résultat escompté, j'ai testé avec COUNT + IF (ce qui devrait aussi être faisable ?). Mais je n'ai pas trouvé la syntaxe qui ne me retourne pas d'erreur...
Décidément, en dehors des SELECT *, je suis vraiment une quiche
Dernière modification par cramj (08-09-2010 10:11:44)
Hors ligne
Si tu regardes bien j'ai remplacé les COUNT par des SUM(IF)) qui somment des 1 si c'est vrai et des 0 si c'est faux.
C'est tout bête, en fait.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
En effet tout bête, maintenant que je comprends le comportement du IF (que je n'avais jamais utilisé).
Alors pour m'assurer d'avoir bien compris, je me suis amusé à additionner les ID en faisant SUM(IF(user_id <> 1,user_id,0)) AS membres
oui, un rien m'amuse
Merci encore pour toutes ces réponses Maljuna Kris et tous les autres.
PS :
Au moment où je rédige ce post, je m'aperçois qu'on retrouve une syntaxe similaire avec un tableur : =SI(A1=1;A1;0)
Hors ligne
La syntaxe SQL standard serait
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Pages :: 1