j'ai une table mysql stockant des infos par utilisateur avec pour chacune un champs nouveau ou pas :
id_user | thème |nouveau 33 05 0
33 06 1
33 06 1
j'essaye d'extraire de cette table pour chaque utilisateur un count par thème et par nouveau ou pas
> select count (theme) as nbr, count (nouveau) as nbrn WHERE id_user='33'
çà marche pas ! c'est normal il faudrait que je mette une condition sur le nouveau > WHERE id_user='33' AND nouveau ='1' mais dans ce cas je n'ai pas le cas pas nouveau =0
comme c'est une requete qui se lance plusieurs dizaine de fois dans la page (intranet) ne ne veux pas abuser et faire deux requetes ..
j'essaye de mettre cela en une seule mais je trouve pas le moyen
avec une requete imbriqué IN je vois pas comment et tjours la crainte de multiplier les requetes
y'a sans doute un truc plus simple auquel j'ai pas pensé si vous avez une idée
merci
antoine
Publicité
Posté le 10-07-2006 à 16:59:11
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-07-2006 à 17:08:21
bin tu mets un groupe by ou alors j'ai rien compris
Code :
select theme, nouveau, count (theme) as nbr, count (nouveau) as nbrn WHERE id_user='33' group by theme, nouveau
Et si tu as besoin de la somme de tous les cas, tu peux même faire péter un rollup ( a coditions d'avoir la bonne version de mysql)
soulmanto
Chat Noir replica
Posté le 10-07-2006 à 17:09:01
et l'agrégation GROUP BY, alors?
Code :
SELECT COUNT(*) ,theme,nouveau FROM ta_table GROUP BY theme, nouveau
anapajari
s/travail/glanding on hfr/gs;
Posté le 10-07-2006 à 17:10:25
Note: c'est sa requete qu'est la bonne moi j'ai merdé dans le copié/collé
il faut juste faire count(*)
jhac
Posté le 10-07-2006 à 17:35:47
résolu avec :
select count (theme) as nbr, count(if (nouveau=1,nouveau,null))as n_nouveau, count(if(nouveau=0,nouveau,null))as pas_nouveau WHERE id_user='33'