Statistiques entre 2 dates

Alpha_911 Messages postés 8 Date d'inscription samedi 16 novembre 2013 Statut Membre Dernière intervention 27 juillet 2023 - 16 nov. 2013 à 23:59
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 19 nov. 2013 à 00:03
Bonjour,

Je souhaite faire des statistiques sur des données que j'ai en base de donnée impliquant des dates.

J'ai une date d'entrée ($date_debut = 2013-07-21)
et date de sortie ($date_fin = 2013-09-04)

j'aimerais pouvoir classer dans un tableau de ce type :

Janvier = 0 jours
Fevrier = 0 jours
Mars = 0 jours
Avril = 0 jours
Mai = 0 jours
Juin = 0 jours
Juillet = 11 jours
Aout = 31 jours
Septembre = 4 jours
Octobre = 0 jours
Novembre = 0 jours
Decembre = 0 jours

Avez vous une piste ? une idée ?
Merci

3 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 nov. 2013 à 14:58
Bonjour,

Sans trop forcer :
mysql MONTH

Ensuite un GROUP BY et c'est réglé.

Pour l'affichage, ce sera à toi de voir comment t'y prendre.
0
Alpha_911 Messages postés 8 Date d'inscription samedi 16 novembre 2013 Statut Membre Dernière intervention 27 juillet 2023
17 nov. 2013 à 15:22
Merci pour cette réponse,
j'ai essayé avec une methode qui s'en rapproche mais j'ai crainte que cela ne fonctionne pas correctement.

$janviern = mysql_query("SELECT * FROM 'chats' WHERE 'date_entree' LIKE '$ann-01-%' AND 'valid' = '1'");
$nbresajanviern = mysql_num_rows($janviern);
while($sq = mysql_fetch_array($janviern)) 
		{
		$dateentree = $sq[date_entree];
		$datesortie = $sq[date_sortie];
		$mois = substr("$datesortie", 5, 2);
		if($mois == '02')
		{
		$encoursjanvier = date( "t", mktime ( 0, 0, 0, 1, 1, "$ann"));
		$janvds = "$ann-01-$encoursjanvier";
		$nbfjanv = round((strtotime($janvds) - strtotime($dateentree))/(60*60*24));
		$nbfjanvier = ($nbfjanv + $nbfjanvier);
		}
		$nbjanviern = round((strtotime($datesortie) - strtotime($dateentree))/(60*60*24));
		$nbjoursjanviern = ($nbjoursjanviern + $nbjanviern);
		}
		$nbjourspourjanvier = ($nbfjanv + $nbresajanviern);
//$nbjoursjanviern = ($nbjoursjanviern + $nbresajanviern);
$restejanvier = ($nbjoursjanviern - $nbjourspourjanvier + $nbresajanviern);
....

Je dois avoir loupé quelque chose il doit il y avoir un moyen plus simple ...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 nov. 2013 à 15:30
As-tu essayé ma proposition ?
0
Alpha_911 Messages postés 8 Date d'inscription samedi 16 novembre 2013 Statut Membre Dernière intervention 27 juillet 2023
17 nov. 2013 à 15:46
Je suis en train de me documenter sur la requête pour voir comment la tourner :
Si je comprend bien :

SELECT MONTH('$date_debut ');
me retournerais 07 mais je ne vois pas comment cumuler dans une boucle cela.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 nov. 2013 à 16:16
Utilises la clause SQL GROUP BY
0
Alpha_911 Messages postés 8 Date d'inscription samedi 16 novembre 2013 Statut Membre Dernière intervention 27 juillet 2023
17 nov. 2013 à 16:21
Peux tu me fournir un exemple ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 nov. 2013 à 16:24
SELECT ... FROM ... WHERE ... GROUP BY MONTH(...)
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
17 nov. 2013 à 16:36
Bonjour,
Comme le dit NHenry il te faut utiliser la clause GROUP BY et le mot clé MONTH. (question de SQL et non de PHP... mais bon...)

En gros.. ta requête pourrait ressemble à quelque chose comme ça:
SELECT count(*) FROM 'chats' WHERE  'valid' = '1'
GROUP BY MONTH('date_entree')


mais ça ne te donnera pas les mois "vides". seulement ceux pour lesquels tu as des infos.

Si tu veux vraiment avoir TOUS les mois de l'année.. tu peux gèrer cela en PHP en faisant une boucle sur chaque mois

// Boucle sur chaque mois
For ($i=1;$i<13;$i++){
 // récupération des valeurs qui m'intéressent 
  $sql = "Select count(*) as NB from MaTable Where macondition";
  //lancement de la requête....
 
 // Tu peux stocker la valeur dans un tableau par exemple..

// etc..
}




0
Alpha_911 Messages postés 8 Date d'inscription samedi 16 novembre 2013 Statut Membre Dernière intervention 27 juillet 2023
Modifié par Alpha_911 le 17/11/2013 à 16:53
Ok Merci Jordan mais celà ne donnerait t'il pas uniquement que le nombre d'enregistrement ?

car voila à quoi ressemble ma ligne d'enregistrement

id, nom, date_entree, date_sortie, valid
1, titi, 2012-07-21, 2012-09-04, 1

le script devrait être capable de dire

Juillet = 11 jours (21/07 au 31/07)
Aout = 31 jours (01/08 au 31/08)
Septembre = 4 jours (01-09 au 04/09)
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
19 nov. 2013 à 00:03
J'ai un doute...
Tu veux avoir le nombre de dates par Mois entre deux dates ou récupérer le nombre d'enregistrement (par Mois) entre deux dates ?

Dans le premier cas, il ne faut pas utiliser de requête mais directement le calculer en PHP
0
Rejoignez-nous