Page 1 sur 1

Trier des resultats statistiques date

Posté : 02 mai 2014, 09:46
par alpha911
Bonjour,
j'aimerais trier et additionner les données afin de les mettre dans un tableau de synthese par exemple :

Janvier : 47 jours
Fevrier : 59 jours
Mars : 23 jours
Avril : 12 jours

Une ame charitable pourrait t'elle m'aiguiller ?

voici le code
<?php
$result=mysql_query("SELECT * FROM chats");
while($row = mysql_fetch_array($result)){
 $tabDates = jourParMois($row['date_entree'], $row['date_sortie']); //appel à la fonction jourParmois()
  /*pour chaque couple(date_entree,date_sortie)
  on  affiche éventuellement tous les mois compris entre date_entree et date_sortie incluses*/
  foreach($tabDates as $date){
   echo $date,"<br>";
 }
}

/*
*
détermine les mois compris entre 2 dates
**/
 
function jourParMois($dateDebut, $dateFin){
$dateDebut=strtotime($dateDebut);

$dateFin =strtotime($dateFin);


$dateCourante = $dateFin;

$dates=array();
//les dates à comparer correspondent à des mois different, alors on peut chercher les mois  compris entre dateDebut et dateFin
if(  date('m',$dateDebut) != date('m',$dateFin))         {
while ($dateCourante >= $dateDebut) {
     $dateCourante = strtotime( date('Y/m/01/',$dateCourante).' -1 month');
   $dates[]=date('M',$dateCourante) .':'.date('t',$dateCourante).'jours';

}
sort($dates);
$dates[0]=date('M',$dateDebut).':'.jRestants($dateDebut).'jours';//on ajoute la DateDebut
$dates[]=date('M',$dateFin).':'.jRestants($dateFin).'jours';//on ajoute la dateFin au tableau
}else{//cas les 2 dates (debut et fin) correspondent au même mois
$nbJours = ((($dateFin - $dateDebut)/86400) + 1).' jours';
//$nbJours = (($dateFin - $dateDebut)/86400).' jours';
$dates[] = date('M', $dateDebut).':'. $nbJours;
}

return  $dates;
}
/*
nombre de jours restants d'un mois donné
*/
function jRestants($date){
  
return date('t',$date)-date('d',$date);
}

Re: Trier des resultats statistiques date

Posté : 02 mai 2014, 10:52
par moogli
salut,

ceci peux ce faire simplement en sql, avec un count + group by

exemple
SELECT COUNT(1) AS nb, extract( month from ladate) AS dt
FROM chats
GROUP BY dt
nb contient le nombre de chats pour le mois indiqué dans dt.
dt est un nombre de 1 à 12 (facile pour la traduction ;) ). j'ai utiliser les numéros de mois parce que tu les npms sur le serveur ne sont pas forcément traduit.

@+

Re: Trier des resultats statistiques date

Posté : 02 mai 2014, 11:11
par alpha911
Merci pour cette réponse,
j'ai plusieurs noms dans cett base de données de chats et celà se presente comme ceci :

idchat, nom, date_entree, date_sortie

et dans l'exemple j'aimerais savoir en tout combien de jours sont restés les chats avant l'adoption classé par mois mais une vue globale

la donnée est ainsi :

1, Titi, 2013-12-04, 2014-01-02 (soit 27 jours en décembre, 2 jours en janvier)
2, Minette, 2013-12-30, 2014-01-03 (soit 1 jour en decembre, 3 jours en janvier)

le tableau doit donner :

Decembre : 28 jours (27 jours de Titi et 1 jours de Minette)
Janvier : 5 jours (2 jours de Titi et 3 de Minette)

Penses tu que la requette que tu me proposes réussisse à faire ce travail ?

Merci sincèrement car je galère depuis quelques mois la dessus ...

Re: Trier des resultats statistiques date

Posté : 02 mai 2014, 11:39
par moogli
salut,

la requête que je t'ai donnée non, elle compte le nombre de chats présents sur un mois.

par contre le principe est similaire, il te faut faire le calcul dans la requête mysql sais très bien faire cela.

pour info la doc sur les fonctions de date de mysql : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

tu auras besoin de datediff()

exemple
select idchat, nom, date_entree, date_sortie,  datediff(date_sortie,date_entree) as nbJour from chats
par contre je ne vois pas exactement le rapport avec ton exemple du début qui affiche un nombre de jour par mois.

@+

Re: Trier des resultats statistiques date

Posté : 04 mai 2014, 02:51
par alpha911
En effet un enregistrement donne ceci :
(etiquette enregistrements) enregistrement.

(idchat), (nom), (date_entree), (date_sortie)
1, Minette, 2013-12-30, 2014-01-02
2, Titou, 2013-12-29, 2014-01-04

le tableau devrait etre une statistique globale de ce genre :

Decembre : 3 jours
Janvier : 6 jours

Minette et titou sont dans la base et minette a fait 1 jour en decembre et Titou a fait 2 jours en decmebre soit un total general de 3 jours ... pareil en Janvier.