J’explique mon soucis, en fait chaque matin, un formulaire est rempli, la date se fait automatiquement via du php et il y a aussi une colonne qui s’incrémente de 1 à chaque entrée.
Et donc je voudrais que les 7 dernières entrées de la colonne ‘total’ soient additionné pour en faire un total sur les 7 derniers jours.
Voici la table :
et le bout de code :
il y a obligatoirement une entrée par jour donc pas de soucis de ce côté là et j’aimerais utiliser la colonne id pour récuperer les 7 dernières entrées si possible
Je l’avais déjà essayé mais cela me donne le total de la colonne et non pas des 7 derniers.
Mais je pensais que LIMIT ne servait que pour afficher le résultat !
Tu ne peux pas plutôt additioner les valeurs avec un code PHP ?
Genre :
<?PHP
$db = mysql_connect('localhost', 'xxxxxxxxx', 'xxxxxxxxx');
mysql_select_db('xxxxxxxxxx',$db);
$sql = 'SELECT total,id FROM district1 ORDER BY id DESC LIMIT 7;
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = 0;
while ($res = mysql_fetch_array($result))
$total += $res['total'];
echo "Le total est de : " . $total . "<br> Sur les 7 derniers jours<br>";
mysql_close();
?>
Sinon, tu peux t’en sortir avec une sous-requête :
SQL
[color=blue;font-weight:bold]SELECT[/color] SUM(total) as masomme FROM (SELECT total,id FROM district1 ORDER BY id DESC LIMIT 7)
Mais ça ne sera pas compatible si la version de MySQL est trop vieille (je pense qu’il faut au moins MySQL 4.1)
Cela me règle le problem pour les 7 derniers jours, mais pour la fin du mois, sachant qu’il y a parfois 30 où 31 jours, quel serait la meilleur solution ?
tu devrais utiliser le type DATE pour le champ date, cela te permettrait d’utiliser les fonctions de date sur ce champ, et donc de faire un filtrage sur le mois du genre :
SELECT SUM(total) as masomme FROM district1 WHERE MONTH(date) = 2;
(exemple pour février … si tu veux le mois précédent et que tu ne peux pas le spécifier dans la requète, voir pour forger une date avec mktime())
Edit : et pareil pour le total, tu devrais le mettre en entier non-signé, et le dimensionner en fonction de l’estimation maximale qu’il doit pouvoir atteindre … tu sais, il existe d’autres types de données que varchar en SQL
Vu que pour l’instant je ne peux upgrader la version de mysql, j’ai ajouté des tables :
CREATE TABLE district1 (
id int(255) NOT NULL auto_increment,
jour varchar(255) NOT NULL default '',
mois varchar(255) NOT NULL default '',
annee varchar(255) NOT NULL default '',
xxxx1 varchar(255) NOT NULL default '',
xxxx2 varchar(255) NOT NULL default '',
xxxx3 varchar(255) NOT NULL default '',
xxxx4 varchar(255) NOT NULL default '',
xxxx5 varchar(255) NOT NULL default '',
xxxx6 varchar(255) NOT NULL default '',
total varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
Je pense qu’avec le champ ‘mois’ qui est rempli avec soit ‘01’ ‘02’… je peux afficher le total par mois. Voici le formulaire pour info :
Jour
<input name="jour" type="text" value ="<?php
$jour = date("d");
echo "$jour";
?>" size="2" maxlength="2" />
Mois
<input name="mois" type="text" value ="<?php
$mois = date("m");
echo "$mois";
?>" size="2" maxlength="2" />
Année
<input name="annee" type="text" value ="<?php
$annee = date("Y");
echo "$annee";
?>" size="4" maxlength="4" />
Voici l’ancien code qui me permettais d’afficher les 30 derniers jours, mais, comment additionner seulement ceux d’une meme valeur dans la colonne ‘mois’ ?
<?PHP
$db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
mysql_select_db('xxxxxx',$db);
$sql = 'SELECT total,id FROM district1 ORDER BY id DESC LIMIT 30';
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = 0;
while ($res = mysql_fetch_array($result))
$total += $res['total'];
echo "<font size='2' color='#ff0000' face='Verdana, Arial, Helvetica, sans-serif'>Le total est de : " . $total . "<br> Sur les 30 derniers jours</font><br>";
mysql_close();
?>