Cumul de donénes (de date à date)

Eléphant du PHP | 94 Messages

19 août 2006, 11:21

Bonjour

Je reviens de nouveau avec mon histoire de cumul de données avec une nouvelle variante !

On part d'une table avec un champ date et un champ numérique.

Nous sommes le 19/08. Je veux faire un cumul des données depuis le premier jour de l'année. Donc je lance une requete (SQL COUNT par exemple) avec mes 2 bornes (01/01/2006 et 19/08/2006).

MAIS, je souhaite aussi avoir le même cumul pour l'année dernière c'est à dire la somme de mon champ numérique pour la période 01/01/2005 au 19/08/2005 ... pour faire une comparaison.

Dans ce cas, qu'est ce qui esl le mieux :

-> Je fais 2 requetes ?
-> Je fais une requete et je récupère toutes mes données depuis le 01/01/2005 et je calcule mes valeurs ? C'est cette solution qui me séduit le plus mais je n'arrive pas à la mettre en oeuvre
rspir

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 août 2006, 12:03

Option 3 : Si c'est sur l'année complète que le cumul t'interesse, tu peux aussi utiliser la commande GROUP BY pour regrouper des éléments :

Code : Tout sélectionner

-- selectionne la partie année des dates et la somme de tes valeurs SELECT YEAR(ta_date) AS annee, SUM(ton_champ) AS cumul FROM ta_table GROUP BY annee -- regroupe les résultat sur la colonne annee ORDER BY annee -- tri sur la colonne annee
Tu obtiendras ainsi des données sous la forme :

Code : Tout sélectionner

ANNEE | CUMUL ----------- 2003 | 12 2005 | 83 2006 | 33
Si par contre le date à date est important, au choix, tu fais tes deux requêtes (ce qui est probablement le plus simple), soit effectivement, tu récupères le tout en php, puis tu fais une boucle et stocke les résultat dans des variables ou un tableau en fonction de la date
while ($row = mysql_fetch_assoc($res) ) {
  $tableau[$row['annee']] += $row['ton_champ'];
}

Eléphant du PHP | 94 Messages

19 août 2006, 12:07

Bonjour

J'ai déjà testé le group by.
Le souci c'est qu'il me prend tout 2005 (du 01/01/2005 au 31/12/2005) alors que je voudrais qu'il s'arrete au 19/08/2006 (dans mon exemple).

Pour le moment, je fais effectivement 2 requetes :

1. je récupère la date 2006 souhaitée (date la plus récente dans ma table) => DATE1
2. Je calcule an -1 => DATE2
3. je fais une requete allant du 1er janvier de l'année en cours jusqu'à DATE1 dans le between
4. je fais une requete allant du 1er janvier de l'année-1 jusqu'à DATE2 dans le between
rspir

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 août 2006, 12:16

Ca marche bien aussi :)

cela dit, tu peux aussi compléter ma requête avec un where pour restreindre les zones affectées avec tes dates (ca ne change pas grand chose si ce n'est que ca ne fait qu'une requête.. après faut faire au plus simple et au plus clair pour toi :)) :

Code : Tout sélectionner

SELECT ... FROM ... WHERE (ta_date BETWEEN dd/mm/yyyy-1 AND dd/mm/yyyy-1) OR (ta_date BETWEEN dd/mm/yyyy AND dd/mm/yyyy) GROUP BY ...

Eléphant du PHP | 94 Messages

19 août 2006, 12:20

Ah bah je n'avais jamais imaginé utiliser le OR dans la clause WHERE ....
M'en va essayer de suite !

EDIT : Bien sur, cela fonctionne tout bien ... ! Cela me fait économiser une requête et apprendre un truc de plus. Merci !!!!
rspir