8800 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Ta demande n'est pas assez détaillée.

Donnée = valeur ? Valeur arbitraire ?

Si je comprends bien; imaginons, donc, que je souhaite "obtenir la valeur d'une donnée précise, datant d'un an avant maintenant. Si la valeur de l'année précédente n'est pas trouvée, considérer 0.".

Primo : je pense que c'est contre les statistiques de considérer 0 pour une donnée absente. Mais bref.

Secundo : si mysql ne retrouve aucune valeur, il ne retourne rien. Dans ton exemple, si tu n'avais pas de valeur il y a un an, ta clause WHERE va faire que tu n'as aucun retour. Ce, NULL ou pas. Dans ce genre de cas, justement, tu vas compter le nombre de résultats, si ce nombre est 0, tu n'as pas de datas, donc... '0'.

Si ta requête n'est qu'un ersatz d'une requête avec des LEFT JOIN (par exemple), là ça devient plus intéressant. Auquel cas, imaginons un énoncé:
"obtenir la valeur d'une donnée précise actuelle, ainsi que celle datant d'un an avant maintenant. Si la valeur de l'année précédente n'est pas trouvée, considérer 0."

Auquel cas on aurait quelque chose comme
SELECT ta.pop AS pop_actual, IFNULL(tp.pop, 0) AS pop_past
FROM populations ta
LEFT JOIN populations tp
ON (
  (tp.pays = ta.pays)
  AND
  (TIMESTAMP(tp.date_eval) = TIMESTAMP(ta.date_eval - INTERVAL 1 YEAR))
)
WHERE ta.date_eval = NOW()


Tu vois le souci ? Il te manque un point de référence, un ancrage, forçant au moins un résultat. Si mysql ne trouve rien, il ne renvoie rien, et pas "une ligne de rien". Ici, avec le LEFT JOIN, on a une référence croisée. Si la table ta ne retournait rien, car aucune donnée, on aurait aucun résultat, la requête serait inefficace.
Donc soit tu as un point de repère, d'ancrage, soit tu dois vérifier à posteriori le nombre de résultats pour savoir si oui ou non tu as une donnée. Tu peux également passer par une requête COUNT (ou autres fonctions d'agrégats), mais cela va soit te bloquer pour l'obtention des données, soit te forcer à faire une opération coûteuse en SQL Smiley smile
Modifié par Lpu8er (02 Sep 2011 - 12:22)
Pages :