Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1528 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PHP/MySQL] count(*) et nombre de résultats NULL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/MySQL] count(*) et nombre de résultats NULL

n°1154036
nero27
Posté le 19-07-2005 à 18:53:06  profilanswer
 

Bonjour, voilà mon problème :
j'ai cette fonction :

Code :
  1. $query="select count(*) from chval where lieu=1 and mort=1 and proprete>3 and idm=$_SESSION[idm] group by idm";
  2. $result=mysql_query($query,$link);
  3. $row=mysql_fetch_row($result);
  4. //traitement à partir des résultats de la requête...


 
Seulement, parfois, le résultat est 0, or j'ai vu dans la doc MySQL que count(*) ne supporte pas les nombres de résultats NULL : connaitriez-vous une manière de contourner le pb ?
 
Merci d'avance :jap:

mood
Publicité
Posté le 19-07-2005 à 18:53:06  profilanswer
 

n°1154046
nero27
Posté le 19-07-2005 à 19:17:16  profilanswer
 

Pour l'instant, j'ai contourné en faisant :

Code :
  1. $query="select count(*) from chval where lieu=1 and mort=1 and proprete>3 and idm=$_SESSION[idm] group by idm";
  2. $result=mysql_query($query,$link);
  3. if ($row=mysql_fetch_row($result))
  4. {
  5.     //traitemnt à partir des résultats de la requête...
  6. }
  7. else
  8. {
  9.     //traitement dans le cas où le résultat est 0
  10. }


 
Il n'y a pas une façon plus propre de faire ça ?


Message édité par nero27 le 19-07-2005 à 19:17:42
n°1154056
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-07-2005 à 19:33:18  profilanswer
 

1/ vire ton "group by idm" il est inutile.
 
Sinon, je ne comprends pas exactement ce que tu as comme problème, et ce que tu attends.
 
Ta requête ne retourne "rien" (aucune ligne) ou "zéro" (valeur 0 indiquant qu'il n'y a aucune ligne).
 
Si t'as aucune ligne, mais que tu veux 0, alors le simple fait de virer le IDM du group by devrait résoudre le problème il me semble (on ne peux pas regrouper des lignes sur un critère qui n'existe pas, hors dans ton cas, si aucune ligne ne correspond à la valeur de IDM, il ne peux rien grouper dessus). Si ça ne suffit pas, tu peux tenter de faire un is_null(count(*), 0) mais je ne pense pas que ça résolve le problème.


Message édité par Arjuna le 19-07-2005 à 19:34:03
n°1154149
swich
snps
Posté le 19-07-2005 à 22:41:56  profilanswer
 

euu j'ai compri 2 chose differentes :  
1 : count peut renvoyer null ou 0. -> si c ca pas de problèmes count renvoie tjs au pire 0.
2 : il y'a unproblème qd le champs a comptabiliser vaut null.
dans ce cas tu utilises la fonction nvl(champ,valeur a remplacer)
qui pour tt les champ a null va te mettre la valeur specifiée.
 

n°1154625
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-07-2005 à 12:37:01  profilanswer
 

En fait, si tu fais un COUNT sans regroupement, alors il retourne 0
Si tu fais un COUNT avec un group by sur un champ dont des valeurs sont trouvées, mais pas de ligne en correspondance, alors ça vaut 0
Si tu fais un COUNT avec un group by sur un champ dont on ne trouve aucune valeur qui correspond aux filtres, alors ça ne retourne pas de ligne.
 
Exemple :
 
select count(*) from latable where 0 = 1
-> Retourne 0
 
select count(*) from latable group by nom
-> Retourne une valeur ou 0 pour chaque valeur possible de nom
 
select count(*) from latable where nom <> nom group by nom
-> Ne retourne aucune ligne, car aucune valeur du champ de regroupement n'a été trouvée

n°1154629
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-07-2005 à 12:42:40  profilanswer
 

Tiens, quoi que non, j'ai dit une connerie, même dans l'avant dernier cas SQL Server ne retourne rien :D
 
C'est chelou d'ailleurs :D
 

Code :
  1. select * from tsttbl
  2. select count(*) from tsttbl
  3. select count(*) from tsttbl group by id
  4. select count(*) from tsttbl where val < 0 group by id
  5. select count(*) from tsttbl where id <> id group by id


 

Code :
  1. id                   val                 
  2. -------------------- --------------------
  3. 4                    123
  4. (1 ligne(s) affectée(s))
  5.            
  6. -----------
  7. 1
  8. (1 ligne(s) affectée(s))
  9.            
  10. -----------
  11. 1
  12. (1 ligne(s) affectée(s))
  13.            
  14. -----------
  15. (0 ligne(s) affectée(s))
  16.            
  17. -----------
  18. (0 ligne(s) affectée(s))


 
Par contre tu peux contourner le problème comme suis (traduit pour MySQL)
 

Code :
  1. select top 1 * from (
  2. select count(*) yo from tsttbl where val < 0 group by id
  3. union select 0 yo
  4. ) prout
  5. order by yo desc


Message édité par Arjuna le 20-07-2005 à 12:43:17
n°1154635
nero27
Posté le 20-07-2005 à 12:58:54  profilanswer
 

ok, merci pour vos explications :jap:
Je vais enlever le group by idm et tout devrait fonctionner ;)


Message édité par nero27 le 20-07-2005 à 12:59:15
n°1154688
alien_nan
Posté le 20-07-2005 à 13:53:04  profilanswer
 

nero27 a écrit :

ok, merci pour vos explications :jap:
Je vais enlever le group by idm et tout devrait fonctionner ;)


 
Et pour la forme .. mets pas count(*), mais count(cle_primaire), c'est pour toi avoir des meilleures performances :hello:

n°1154750
nero27
Posté le 20-07-2005 à 14:24:53  profilanswer
 

alien_nan a écrit :

Et pour la forme .. mets pas count(*), mais count(cle_primaire), c'est pour toi avoir des meilleures performances :hello:


Merci pour le conseil :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PHP/MySQL] count(*) et nombre de résultats NULL

 

Sujets relatifs
Mysql et securitéProb mysql en C avec INSERT
[PHP] reduire le poids d'une image.[PHP] Generateur de code
Optimisation d’un modèle (objet) 3D (Diminution du nombre de face)Pb sauts de lignes dans MySQL
Formater un nombrehtml php et mysql
compteur nombre de visiteurs[PHP / Exchange]
Plus de sujets relatifs à : [PHP/MySQL] count(*) et nombre de résultats NULL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR