par
Ryle » 04 mars 2007, 02:37
La boucle c'est pas bien compliqué, au lieu de taper 12 fois le même code en changeant manuellement le numéro de mois dans chaque, tu ne le tapes qu'une fois et tu demandes à php de l'exécuter 12 fois en changeant tout seul le numéro

L'idée ici est donc d'avoir une requête qui va te ramener les n enregistrements dont tu as besoin et executer ton code n fois, au lieu de t'obliger à tout faire manuellement
1- ta boucle me retourne le valeur du TA et PAS le total des TA du mois.
Pour le TA, je me suis basé sur ta requête ('SELECT TA FROM prestation WHERE YEAR(date) = 2007 AND MONTH(date) = 3 '), si tu veux la somme des TA pour le mois, il suffit de mettre un SUM(ta) et de le retirer du group by
$sql = "SELECT
MONTH(date) AS mois, SUM(ta) AS somme_ta, SUM(prix) AS montant FROM prestation
WHERE YEAR(date) = 2007
AND MONTH(date) .......
GROUP BY MONTH(date)
ORDER BY date
";
A noter par ailleurs, que tes conditions sont incomplètes, il et manque une valeur pour le mois :
WHERE YEAR(date) = 2007 // WHERE l'année est égale à 2007
AND MONTH(date) // ET le mois est ... ???
Ton critère devrait être du genre :
AND MONTH(date) BETWEEN 1 AND 3 // entre 1 et 3
AND MONTH(date) IN (1, 3) // égale à 1 ou égale à 3
AND date BETWEEN '2006-10-01' AND '2007-03-31' // entre octobre 2006 et avril 2007 (mais faut virer le YEAR(date) = 2007 dans ce cas

)
2- Et mon tableau ne fonctionne pas je reçois toujours pour le mois 1 pour le mois 2 et non pas pour le mois de janvier, pour le mois de février ?
Un petit problème d'algo ça

Suivons le déroulement de ton code ligne à ligne :
$sql = "..."; // tu prépares la requête que tu stockes dans $sql
$month = array( ... ); // tu définis le tableau des mois dans $month
$row['mois'] = $month[date('n')]; // et là ca devient flou ;)
// tu stockes dans un tableau $row['mois'] qui n'existe pas encore (puisqu'il n'est définie que dans la boucle),
// le libellé du mois du tableau $month, associé au numéro du mois en cours (date('n')), donc 3, donc mars.
$rs = mysql_query($sql) .... ; // tu exécutes la requête
while ($row = mysql_fetch_assoc($rs)) { // pour chaque ligne retournée par la requête,
// on crée un tableau associatif que l'ont met dans $row
// ce qui accéssoirement écrase la valeur que tu y a affectés plus haut.
// en fait, c'est dans la boucle qu'il faut aller chercher le mois correspondant dans $month
// non pas à partir du mois en cours, mais à partir du mois que tu as récupéré grace à la requête : $row['mois']
echo 'N° de mois = '. $row['mois'] .'<br />';
echo 'Libellé de mois = '. $month[$row['mois']] .'<br />';
echo 'Somme des TA = '. $row['somme_ta'] .'<br />';
echo 'Somme des prix = '.$row['montant'].'<br />';
echo '<br />'; // saut de ligne avant le mois suivant
}
C'est y plus clair ? (après ça, les boucles n'auront plus de secret pour toi

)
La boucle c'est pas bien compliqué, au lieu de taper 12 fois le même code en changeant manuellement le numéro de mois dans chaque, tu ne le tapes qu'une fois et tu demandes à php de l'exécuter 12 fois en changeant tout seul le numéro :)
L'idée ici est donc d'avoir une requête qui va te ramener les n enregistrements dont tu as besoin et executer ton code n fois, au lieu de t'obliger à tout faire manuellement :)
[quote]1- ta boucle me retourne le valeur du TA et PAS le total des TA du mois.[/quote]
Pour le TA, je me suis basé sur ta requête ('SELECT TA FROM prestation WHERE YEAR(date) = 2007 AND MONTH(date) = 3 '), si tu veux la somme des TA pour le mois, il suffit de mettre un SUM(ta) et de le retirer du group by :)
[php]$sql = "SELECT
MONTH(date) AS mois, SUM(ta) AS somme_ta, SUM(prix) AS montant FROM prestation
WHERE YEAR(date) = 2007
AND MONTH(date) .......
GROUP BY MONTH(date)
ORDER BY date
"; [/php]
A noter par ailleurs, que tes conditions sont incomplètes, il et manque une valeur pour le mois :
WHERE YEAR(date) = 2007 // WHERE l'année est égale à 2007
AND MONTH(date) // ET le mois est ... ???
Ton critère devrait être du genre :
AND MONTH(date) BETWEEN 1 AND 3 // entre 1 et 3
AND MONTH(date) IN (1, 3) // égale à 1 ou égale à 3
AND date BETWEEN '2006-10-01' AND '2007-03-31' // entre octobre 2006 et avril 2007 (mais faut virer le YEAR(date) = 2007 dans ce cas ;))
[quote]2- Et mon tableau ne fonctionne pas je reçois toujours pour le mois 1 pour le mois 2 et non pas pour le mois de janvier, pour le mois de février ? [/quote]
Un petit problème d'algo ça :) Suivons le déroulement de ton code ligne à ligne :
[php]$sql = "..."; // tu prépares la requête que tu stockes dans $sql
$month = array( ... ); // tu définis le tableau des mois dans $month
$row['mois'] = $month[date('n')]; // et là ca devient flou ;)
// tu stockes dans un tableau $row['mois'] qui n'existe pas encore (puisqu'il n'est définie que dans la boucle),
// le libellé du mois du tableau $month, associé au numéro du mois en cours (date('n')), donc 3, donc mars.
$rs = mysql_query($sql) .... ; // tu exécutes la requête
while ($row = mysql_fetch_assoc($rs)) { // pour chaque ligne retournée par la requête,
// on crée un tableau associatif que l'ont met dans $row
// ce qui accéssoirement écrase la valeur que tu y a affectés plus haut.
// en fait, c'est dans la boucle qu'il faut aller chercher le mois correspondant dans $month
// non pas à partir du mois en cours, mais à partir du mois que tu as récupéré grace à la requête : $row['mois']
echo 'N° de mois = '. $row['mois'] .'<br />';
echo 'Libellé de mois = '. $month[$row['mois']] .'<br />';
echo 'Somme des TA = '. $row['somme_ta'] .'<br />';
echo 'Somme des prix = '.$row['montant'].'<br />';
echo '<br />'; // saut de ligne avant le mois suivant
}[/php]
C'est y plus clair ? (après ça, les boucles n'auront plus de secret pour toi :))