Statistiques entre 2 dates

Signaler
Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019
-
Messages postés
29173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2020
-
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

Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
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.
Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019

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 ...
Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019

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.
Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
Utilises la clause SQL GROUP BY
Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019

Peux tu me fournir un exemple ?
Messages postés
14689
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 août 2020
144
SELECT ... FROM ... WHERE ... GROUP BY MONTH(...)
Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019

j'ai essayé ceci pour voir ...

SELECT *
FROM 'chats'
WHERE 'date_entree'
GROUP BY MONTH( 07 )


mais celà ne sort qu'un enregistrement sans faire de calcul par mois du nombre de jours.
Messages postés
29173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2020
335
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..
}




Messages postés
8
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
6 avril 2019

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)
Messages postés
29173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 août 2020
335
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