count(*) et nombre de résultats NULL [PHP/MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 19-07-2005 à 19:17:16
Pour l'instant, j'ai contourné en faisant :
Code :
|
Il n'y a pas une façon plus propre de faire ça ?
Marsh Posté le 19-07-2005 à 19:33:18
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.
Marsh Posté le 19-07-2005 à 22:41:56
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.
Marsh Posté le 20-07-2005 à 12:37:01
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
Marsh Posté le 20-07-2005 à 12:42:40
Tiens, quoi que non, j'ai dit une connerie, même dans l'avant dernier cas SQL Server ne retourne rien
C'est chelou d'ailleurs
Code :
|
Code :
|
Par contre tu peux contourner le problème comme suis (traduit pour MySQL)
Code :
|
Marsh Posté le 20-07-2005 à 12:58:54
ok, merci pour vos explications
Je vais enlever le group by idm et tout devrait fonctionner
Marsh Posté le 20-07-2005 à 13:53:04
nero27 a écrit : ok, merci pour vos explications |
Et pour la forme .. mets pas count(*), mais count(cle_primaire), c'est pour toi avoir des meilleures performances
Marsh Posté le 20-07-2005 à 14:24:53
alien_nan a écrit : Et pour la forme .. mets pas count(*), mais count(cle_primaire), c'est pour toi avoir des meilleures performances |
Merci pour le conseil
Marsh Posté le 19-07-2005 à 18:53:06
Bonjour, voilà mon problème :
j'ai cette fonction :
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