Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1055 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Somme des dernières entrées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Somme des dernières entrées

n°1459356
athome
Posté le 18-10-2006 à 10:55:17  profilanswer
 

Bonjour,
 
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 :
 

Code :
  1. CREATE TABLE district1 (
  2. id int(255) NOT NULL auto_increment,
  3. date varchar(255) NOT NULL default '',
  4. xxxx1 varchar(255) NOT NULL default '',
  5. xxxx2 varchar(255) NOT NULL default '',
  6. xxxx3 varchar(255) NOT NULL default '',
  7. xxxx4 varchar(255) NOT NULL default '',
  8. xxxx5 varchar(255) NOT NULL default '',
  9. xxxx6 varchar(255) NOT NULL default '',
  10. total varchar(255) NOT NULL default '',
  11. PRIMARY KEY (id)
  12. ) TYPE=MyISAM;


 
et le bout de code :
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxxxxx', 'xxxxxxxxx');
  3. mysql_select_db('xxxxxxxxxx',$db);
  4. $sql = 'SELECT SUM(total) as masomme FROM district1;
  5. $somme = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $detail = mysql_fetch_assoc($somme);
  7. echo "Le total est de : " . $detail['masomme'] . "<br> Sur les 7 derniers jours<br>";
  8. mysql_close();
  9. ?>

mood
Publicité
Posté le 18-10-2006 à 10:55:17  profilanswer
 

n°1459365
anapajari
s/travail/glanding on hfr/gs;
Posté le 18-10-2006 à 11:05:27  profilanswer
 

tu veux le total des 7 dernières entrées ou des 7 derniers jours? Car j'imagine qu'il y a peut-être des jours sans entrées....

n°1459395
athome
Posté le 18-10-2006 à 11:34:10  profilanswer
 

anapajari a écrit :

tu veux le total des 7 dernières entrées ou des 7 derniers jours? Car j'imagine qu'il y a peut-être des jours sans entrées....


 
il y a obligatoirement une entrée par jour donc pas de soucis de ce côté là ;)
 
Par contre je vois le problem des mois avec 30 et 31 jours qui arrive, mais une chose à la fois  :whistle:

n°1459421
anapajari
s/travail/glanding on hfr/gs;
Posté le 18-10-2006 à 11:50:47  profilanswer
 

Code :
  1. SELECT SUM(total) as masomme FROM district1 where date > DATE_SUB(CURDATE(),INTERVAL 7 DAYS)

n°1459440
athome
Posté le 18-10-2006 à 12:00:42  profilanswer
 

Merci de ton aide, mais j'ai un message d'erreur :
 

Erreur : You have an error in your SQL syntax near 'DAYS)' at line 1


 
Peu être que cela vient de la façon dont le formulaire est rempli :
 

Code :
  1. <input name="date" type="text" value ="<?php
  2.       $date = date("d-m-Y" );
  3.       echo "$date";
  4.       ?>" size="10" maxlength="10" />

n°1459537
anapajari
s/travail/glanding on hfr/gs;
Posté le 18-10-2006 à 14:04:54  profilanswer
 

affiche la requete que tu executes stp!

n°1459631
athome
Posté le 18-10-2006 à 15:20:23  profilanswer
 

anapajari a écrit :

affiche la requete que tu executes stp!


ceci ?
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxxx', 'xxxxxxx');
  3. mysql_select_db('xxxxxxx',$db);
  4. $sql = "INSERT INTO district1
  5. VALUES('$id','$date','$xxxx1','$xxxx2','$xxxx3','$xxxx4','$xxxx5','$xxxx6','$total')";
  6. mysql_query($sql)
  7. or die('Erreur SQL !'.$sql.'
  8. '.mysql_error());
  9. echo '<span style="font-family : Verdana; font-size : 10pt; color : #333333"><strong> Merci beaucoup, vos informations ont été enregistrées.</strong></span>';
  10. mysql_close();
  11. ?>

n°1459707
anapajari
s/travail/glanding on hfr/gs;
Posté le 18-10-2006 à 15:50:50  profilanswer
 

donc non pas ceci :o
 
Tu dois avoir  
 
Ce bout de code la:

Code :
  1. $sql = 'SELECT SUM(total) as masomme FROM district1;
  2. $somme = mysql_query($sql) or die ('Erreur : '.mysql_error() );


Quand la requete pete il affiche ton erreur change le die en

Code :
  1. die('Erreur sur la requete:'.$sql.'--'.mysql_erro()


Relance ton truc, et dis nous ce qu'il affiche
 

Spoiler :

bien envie de relancer de 3 charentaises et pour pouvoir sortir un "pâté de chat et rouflaquettes" sur ce topic...


n°1459721
athome
Posté le 18-10-2006 à 16:00:47  profilanswer
 

J'ai semble t'il résolu mon problem avec ceci :

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxxxxx', 'xxxxxxxxx');
  3. mysql_select_db('xxxxxxxxxx',$db);
  4. $sql = 'SELECT total,id FROM district1 ORDER BY id DESC LIMIT 7;
  5. $result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['total'];
  9. echo "Le total est de : " . $total . "<br> Sur les 7 derniers jours<br>";
  10. mysql_close();
  11. ?>


 
Cela te semble t'il du "bon" code ?
 
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 ?


Message édité par athome le 18-10-2006 à 16:01:41
n°1459998
leflos5
On est ou on est pas :)
Posté le 18-10-2006 à 19:01:07  profilanswer
 

Tu veux les 7 derniers jours, que tu sois le 1er, le 31 ou le 17 t'auras les 7 derniers jours, l'est où le problème :??:

mood
Publicité
Posté le 18-10-2006 à 19:01:07  profilanswer
 

n°1460028
mrbebert
Posté le 18-10-2006 à 20:15:36  profilanswer
 

leflos5 a écrit :

Tu veux les 7 derniers jours, que tu sois le 1er, le 31 ou le 17 t'auras les 7 derniers jours, l'est où le problème :??:

Je donne un indice :
date varchar(255) NOT NULL default '',  :whistle:  
 
(avec ce genre de structure, forcément, il y a des problèmes qui se posent)

n°1460063
leflos5
On est ou on est pas :)
Posté le 18-10-2006 à 21:11:05  profilanswer
 

mrbebert a écrit :

Je donne un indice :
date varchar(255) NOT NULL default '',  :whistle:  
 
(avec ce genre de structure, forcément, il y a des problèmes qui se posent)


J'avais pas vu (ni penser qu'on puisse faire ça...)  m'enfin ça dit pas pourquoi y'aurait un souci avec le 30-31 :??:
 
Je dirais bien que pour eviter de suite toute surprise ou effort inutile, il suffit de donner le vrai type à l'attribut :whistle:

n°1460083
mrbebert
Posté le 18-10-2006 à 21:42:17  profilanswer
 

Oui, effectivement, vu qu'il trie sur la colonne "id", je vois pas non plus le problème avec le 30-31 :pt1cable:  
(en fait, comme il ne prend pas en compte la date, il n'y a pas du tout de souci de date :whistle: )

n°1460340
athome
Posté le 19-10-2006 à 11:27:55  profilanswer
 

mrbebert a écrit :

Oui, effectivement, vu qu'il trie sur la colonne "id", je vois pas non plus le problème avec le 30-31 :pt1cable:  
(en fait, comme il ne prend pas en compte la date, il n'y a pas du tout de souci de date :whistle: )


 
Bien en fait j'ai une page qui affiche les résultats et qui donne ceci :
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
  3. mysql_select_db('xxxxxx',$db);
  4. $sql = 'SELECT total,id FROM district1 ORDER BY id DESC LIMIT 30';
  5. $result = mysql_query($sql) OR die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['total'];
  9. 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>";
  10. mysql_close();
  11. ?>


 
Donc il est écrit en dur 'Sur les 30 derniers jours' mais le soucis c'est quand on est le 31 il manque le 1er du mois  :pt1cable:  

n°1460343
athome
Posté le 19-10-2006 à 11:28:39  profilanswer
 

Donc j'ai changé mes tables comme ceci :
 

Code :
  1. CREATE TABLE district1 (
  2.   id int(255) NOT NULL auto_increment,
  3.   jour varchar(255) NOT NULL default '',
  4.   mois varchar(255) NOT NULL default '',
  5.   annee varchar(255) NOT NULL default '',
  6.   xxxx1 varchar(255) NOT NULL default '',
  7.   xxxx2 varchar(255) NOT NULL default '',
  8.   xxxx3 varchar(255) NOT NULL default '',
  9.   xxxx4 varchar(255) NOT NULL default '',
  10.   xxxx5 varchar(255) NOT NULL default '',
  11.   xxxx6 varchar(255) NOT NULL default '',
  12.   total varchar(255) NOT NULL default '',
  13.   PRIMARY KEY  (id)
  14. ) 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 :
 

Code :
  1. Jour
  2.                       <input name="jour" type="text" value ="<?php
  3.        $jour = date("d" );
  4.        echo "$jour";
  5.        ?>" size="2" maxlength="2" />
  6.                       Mois
  7.                       <input name="mois" type="text" value ="<?php
  8.        $mois = date("m" );
  9.        echo "$mois";
  10.        ?>" size="2" maxlength="2" />
  11.                       Ann&eacute;e
  12.                       <input name="annee" type="text" value ="<?php
  13.        $annee = date("Y" );
  14.        echo "$annee";
  15.        ?>" 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' ?
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
  3. mysql_select_db('xxxxxx',$db);
  4. $sql = 'SELECT total,id FROM district1 ORDER BY id DESC LIMIT 30';
  5. $result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['total'];
  9. 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>";
  10. mysql_close();
  11. ?>


 
Merci encore

n°1460351
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-10-2006 à 11:31:26  profilanswer
 

Comprends rien ... [:w3c compliant]
Tu veux les trentes derniers jours:

Code :
  1. SELECT SUM(total) as masomme FROM district1 where date > DATE_SUB(CURDATE(),INTERVAL 30 DAYS)


Tu veux le mois dernier(qu'il y ait ou non 31 jours):

Code :
  1. SELECT SUM(total) as masomme FROM district1 where date > DATE_SUB(CURDATE(),INTERVAL 1 MONTHS)


Tu veux le "mois en cours" ( si on est le 1er: un seul jour; si on est le 31, 31 jours):

Code :
  1. SELECT SUM(total) as masomme FROM district1 where MONTH(date)=MONTH(CURDATE()) AND YEAR(date)=YEAR(CURDATE())


 
edit: c'est une hérésie de splitter une date en trois champs parce qu'on ne connait pas les "bonnes" fonctions sql...
Je pense avoir enfin compris ce que tu voulais, il s'agissait de la 3eme requete, qui aurait très bien fonctionné si tu n'avais pas changé la structure de ta table :o

Message cité 1 fois
Message édité par anapajari le 19-10-2006 à 11:33:40
n°1460359
athome
Posté le 19-10-2006 à 11:38:12  profilanswer
 

anapajari a écrit :

Comprends rien ... [:w3c compliant]


 
En fait je veux le total du mois de janvier '01', fevrier '02' ... à n'importe quel moment de l'année je me trouve
 
Les 7 derniers jours c'était que pour le lundi matin cela fasse une semaine, donc là ca fonctionne. Mais les 30 derniers jours (pour 1 mois) cela ne fonctionne pas vu que tous les mois n'on pas le meme nombre de jours  :whistle:

n°1460363
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-10-2006 à 11:40:30  profilanswer
 

oui bien ce que je disais 3eme requête, sauf que tu changes le:

Code :
  1. MONTH(date)=MONTH(CURDATE()) AND YEAR(date)=YEAR(CURDATE())


si tu veux février 2006, tu mets:

Code :
  1. MONTH(date)=2 AND YEAR(date)=2006


Message édité par anapajari le 19-10-2006 à 11:40:53
n°1460407
athome
Posté le 19-10-2006 à 12:19:04  profilanswer
 

Je n'ai pas de message d'erreur mais le résultat est zéro alors qu'il devrait être de 6
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
  3. mysql_select_db('xxxxxx',$db);
  4. $sql = 'SELECT SUM(total) as masomme FROM district1 where MONTH(mois)=10 AND YEAR(annee)=2006';
  5. $result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['total'];
  9. echo "<font size='2' color='#ff0000' face='Verdana, Arial, Helvetica, sans-serif'>Octobre 2006 : " . $total . "<br><br>";
  10. mysql_close();
  11. ?

n°1460423
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-10-2006 à 12:27:47  profilanswer
 

tu lis ton code des fois ????

Citation :

$sql = 'SELECT SUM(total) as masomme FROM district1 where MONTH(mois)=10 AND YEAR(annee)=2006';
...
$total += $res['total'];


s'pas gagné hein :o

n°1460432
athome
Posté le 19-10-2006 à 12:41:12  profilanswer
 

anapajari a écrit :

tu lis ton code des fois ????
 
s'pas gagné hein :o


 
 :sleep:  Je débute, alors tout ne me saute pas aux yeux  :ange:  
 
Mais j'ai toujours zéro qui m'est retourné au lieu de 6
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
  3. mysql_select_db('xxxxxx',$db);
  4. $sql = 'SELECT SUM(total) as masomme FROM district1 where MONTH(mois)=10 AND YEAR(annee)=2006';
  5. $result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['masomme'];
  9. echo "<font size='2' color='#ff0000' face='Verdana, Arial, Helvetica, sans-serif'>Octobre 2006 : " . $total . "<br><br>";
  10. mysql_close();
  11. ?>

n°1460438
anapajari
s/travail/glanding on hfr/gs;
Posté le 19-10-2006 à 12:55:31  profilanswer
 

[quotemsg=1460351,16,8c'est une hérésie de splitter une date en trois champs parce qu'on ne connait pas les "bonnes" fonctions sql...
Je pense avoir enfin compris ce que tu voulais, il s'agissait de la 3eme requete, qui aurait très bien fonctionné si tu n'avais pas changé la structure de ta table :o[/quotemsg]
 

athome a écrit :

$sql = 'SELECT SUM(total) as masomme FROM district1 where MONTH(mois)=10 AND YEAR(annee)=2006';


Euh j'avais dit plus haut que ça ne marcherait que si tu remettais l'ancienne structure de date et pas ce nawak qui est la séparation entre trois champs.
YEAR et MONTH sont des fonctions qui s'appliquent sur un champs date !
 

n°1460445
athome
Posté le 19-10-2006 à 13:10:51  profilanswer
 

anapajari a écrit :

C'est une hérésie de splitter une date en trois champs parce qu'on ne connait pas les "bonnes" fonctions sql...
Je pense avoir enfin compris ce que tu voulais, il s'agissait de la 3eme requete, qui aurait très bien fonctionné si tu n'avais pas changé la structure de ta table :o
 
Euh j'avais dit plus haut que ça ne marcherait que si tu remettais l'ancienne structure de date et pas ce nawak qui est la séparation entre trois champs.
YEAR et MONTH sont des fonctions qui s'appliquent sur un champs date !


 
Euh en fait, je préfère que les users puissent modifier la date jj-mm-aa, s'ils ratent un jour :) et ma version de mysql ne me permet pas de convertir je crois : 3.23.39
 
Donc j'ai fais trois champs 'jour' 'mois' et 'annee' et puis trier la colonne 'mois' et additionner tous les '10' (octobre) par exemple, je sais que ce n'est du code pur mais à mon niveau c'est la seule façon simple que j'ai trouvé  :sweat:  
 
Donc si tu as une idée sans les fonctions YEAR et MONTH, je suis preneur  :jap:  ?

n°1460453
athome
Posté le 19-10-2006 à 13:25:18  profilanswer
 

cela semble fonctionner
 

Code :
  1. <?PHP
  2. $db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
  3. mysql_select_db('xxxxxx',$db);
  4. $sql = 'SELECT SUM(total) as masomme FROM district1 where mois=10 AND annee=2006';
  5. $result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
  6. $total = 0;
  7. while ($res = mysql_fetch_array($result))
  8.   $total += $res['masomme'];
  9. echo "<font size='2' color='#ff0000' face='Verdana, Arial, Helvetica, sans-serif'>Octobre 2006 : " . $total . "<br><br>";
  10. mysql_close();
  11. ?>


 
Peu tu me dire si cela est bon ?

n°1460665
leflos5
On est ou on est pas :)
Posté le 19-10-2006 à 15:47:33  profilanswer
 

CA à l'air mais t'es têtu!
 
Pourquoi faire un truc crade à souhait, qui va te prendre la tête dès que tu auras besoin de faire un truc supplémentaire :??:
 
Tu mets une date de type date et tu pourras faire ce que tu veux, 30 ou 31 jours, février ou octobre, modification de la date ou non :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Somme des dernières entrées

 

Sujets relatifs
sommesomme sant texte
Requete avec une clause count et sommecomment faire 1 somme totale de sommes en 1 requete SQL?
Pbleme a resoudre : creation macro somme de 2 colonnes en 1 ? ? ? Thx!Supprimer des entrées elles n'existent pas dans une autre table
Bouton VBA permettant Somme 2 colonnes en 1 pour impression...[Résolu] Lire les 10 dernières lignes d'un fichier
[C#]redirection d'entrées/sortiespetit problème avec somme
Plus de sujets relatifs à : Somme des dernières entrées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR