Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2006, 17h35   #1
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
Par défaut Tri dans les champs à additionner

Bonjour,

Je cherche à additionner les 7 (semaine) dernières entrées dans mysql

Code :
1
2
3
4
5
6
7
8
9
10
11
<?PHP
 
$db = mysql_connect('localhost', 'xxxxxxxxx', 'xxxxxxxxx');
mysql_select_db('xxxxxxxxxx',$db);
 
$sql = 'SELECT SUM(total) as masomme FROM district1;
$somme = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$detail = mysql_fetch_assoc($somme);
echo "Le total est de : " . $detail['masomme'] . "<br> Sur les 7 derniers jours<br>"; 
mysql_close();
?>
Je bloque, car j'ai bien le total de toute la colonne, mais il me faudrait que les 7 et après 30 derniers entrée, sachant qu'il y a un champ 'id' qui s'incrémente à chaque saisi


merci


[Balises Code ajoutées par Maximilian ]
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 19h04   #2
Invité régulier
 
Inscription : août 2002
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 12
Points : 8
Points : 8
Essaye avec une colonne que tu nomme date (varchar 20) et insert "time()" à chaque nouvel enregistrement ensuite tu peux faire une requète avec WHERE date BETWEEN $debut AND $fin

Code :
1
2
3
4
list($j,$m,$a)=explode("-",date("d-m-Y",time()));
$debut=mktime(0,0,0,$m,$j,$a);
list($j,$m,$a)=explode("-",date("d-m-Y",time()-3024000));
$fin=mktime(0,0,0,$m,$j,$a);

3024000= nombre de seconde des 7 semaines (86400 par jour)
DoubleClic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 09h32   #3
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
En fait j'ai du mal m'exprimé, voici la table :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE district1 (
  id int(255) NOT NULL AUTO_INCREMENT,
  date 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;
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 soient additionné pour en faire un total sur les 7 derniers jours.

Merci
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 00h27   #4
Invité régulier
 
Inscription : août 2002
Messages : 12
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 12
Points : 8
Points : 8
Par défaut Comment écris tu ta date ?

Donne moi un enregistrement de ta date pour voir
DoubleClic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 00h33   #5
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
7 dernières entrées
Code PHP :
$sql="SELECT * FROM matable ORDER BY id DESC LIMIT 0,7";

Ensuite tu additionnes les valeurs des champs dont tu as besoin pour les 7 derniers enregistrements
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 11h19   #6
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
Merci de vos réponses, mais il me semble avoir trouvé avec ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?PHP
 
$db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
mysql_select_db('xxxxxx',$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 "<font size='2' color='#ff0000' face='Verdana, Arial, Helvetica, sans-serif'>Le total est de : " . $total . "<br> Sur les 7 derniers jours</font><br>";
mysql_close();
?>
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 11h21   #7
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
Par contre j'ai toujours un soucis pour faire mon total mensuel en fonction des mois à 30,31,28 jours, donc j'ai changé mes tables comme ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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&eacute;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' ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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();
?>
Merci encore
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 11h35   #8
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Bonjour,

Un sel champ de type 'date' suffit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE TABLE district1 (
  id int(255) NOT NULL AUTO_INCREMENT,
  ladate date 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;
Ensuite, pour récupérer les 7 derniers jours :
Code :
1
2
3
4
5
 
$sql = 'SELECT total, id 
         FROM district1 
         WHERE ladate between DATE_SUB(CURDATE(), INTERVAL 7 DAY)
         ORDER BY id DESC';
Pour les 30 derniers jours, même chose mais avec 30 à la pace de 7.
Pour un mois, c'est 'INTERVAL 1 MONTH'.

Le nombre de jour des mois est pris en compte.
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 12h23   #9
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
Citation:
Envoyé par jeca
Pour les 30 derniers jours, même chose mais avec 30 à la pace de 7.
Pour un mois, c'est 'INTERVAL 1 MONTH'.

Le nombre de jour des mois est pris en compte.
Ok mais je ne sais pas si ma version de mysql le gère : 3.23.39

je suis parti la dessus mais ca me retourne zéro au lieu de 6

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?PHP
 
$db = mysql_connect('localhost', 'xxxxxx', 'xxxxxx');
 
mysql_select_db('xxxxxx',$db);
 
$sql = 'SELECT SUM(total) as masomme FROM district1 where MONTH(mois)=10 AND YEAR(annee)=2006';
$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'>Octobre 2006 : " . $total . "<br><br>";
mysql_close();
?
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 13h14   #10
Invité régulier
 
Inscription : octobre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 45
Points : 7
Points : 7
En fait j'ai utilisé les fonctions sur un champ date alors que j'en ai pas

Donc j'ai fais trois champs 'jour' 'mois' et 'annee' et puis trier la colonne 'mois' et additionner tous les '10' (octobre) par exemple.

Si tu as une idée je suis preneur


Merci
athome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2006, 13h33   #11
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
tu peux faire un seul champ DATE (yyyy-mm-dd) puis un select :
Code :
"SELECT SUM(total) as masomme FROM district1 where monchampdate LIKE '2006-10%'";
Je pense que ça devrait marcher
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h38.


 
 
 
 
Partenaires

Hébergement Web