conditions sur 2 count ?

conditions sur 2 count ? - SQL/NoSQL - Programmation

Marsh Posté le 10-07-2006 à 16:59:11    

bonjour,
 
 
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  
 

Reply

Marsh Posté le 10-07-2006 à 16:59:11   

Reply

Marsh Posté le 10-07-2006 à 17:08:21    

bin tu mets un groupe by ou alors j'ai rien compris [:mlc]

Code :
  1. 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)

Reply

Marsh Posté le 10-07-2006 à 17:09:01    

et l'agrégation GROUP BY, alors? ;)
 

Code :
  1. SELECT COUNT(*) ,theme,nouveau FROM ta_table GROUP BY theme, nouveau

Reply

Marsh 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é :o
il faut juste faire count(*)

Reply

Marsh 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'
 
merci

Reply

Marsh Posté le 10-07-2006 à 17:37:17    

Reply

Marsh Posté le 10-07-2006 à 17:39:01    


En fait il voulait les 2 résultats sur une même "ligne" ;)  

Reply

Marsh Posté le 10-07-2006 à 17:40:36    

ah, ok... :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed