La moyenne d'âge d'un parc matériel
Bonjour à tous,
Je m'en remets une nouvelle fois à vos connaissances pour ce sujet que je n'arrive pas à résoudre.
Contexte :
- Table de la Base de données SQL : "parc"
- Plusieurs type de matériels enregistré colonne "TYPE"
- Une date de Première mise en circulation sous la forme DateTime "0000-00-00"
- Une date référence qui évolue sur les 7 dernières années
Objectifs :
Je souhaiterai calculer l'évolution de la moyenne d'âge des matériels sur les 7 dernières années par Type de matériel.
Le code que j'ai édité :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
<?php
for ($k = 0; $k <=6; $k++) {
$dateRecherche = new DateTime($date_fin); // Date de recherche
$dateRecherche->format('Y-m-d'); // Mettre la date au format
$annee=$dateRecherche->format('Y'); // Extraire l'année
$an=$annee-$k; // On extrait une année pour la référence du tableau
$tabKeyAn[$an]=$an;
// On va soustraire 1 an à la date
$dateRecherche->sub(new DateInterval('P'.$k.'Y'));
$dateSelect=$dateRecherche->format('Y-m-d');
$extractAgeVehicule = $bdd->query("SELECT TYPE, AVG(DATEDIFF(".$dateSelect.",PREMIERE_CIRCULATION)) AS age_moyen FROM `parc` WHERE SESSION_UTILISATEUR='".$_SESSION['session_parc']."' AND PREMIERE_CIRCULATION<='".$dateSelect."' AND (DATE_DECLASSEMENT>='".$dateSelect."' OR DATE_DECLASSEMENT='0000-00-00') GROUP BY TYPE");
while ($moyenneAgeExtraitParAn = $extractAgeVehicule->fetch()){
$type=$moyenneAgeExtraitParAn['TYPE'];
$moyenneAge[$an][$type]=$moyenneAgeExtraitParAn['age_moyen'];
}
}
var_dump($moyenneAge);
?> |
Résultat de la requête :
array(7) { [2018]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2017]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2016]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2015]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2014]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2013]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } [2012]=> array(9) { ["BERLINE"]=> NULL ["DIVERS"]=> NULL ["FGON"]=> NULL ["FGTTE"]=> NULL ["P.L."]=> NULL ["SCOOTER"]=> NULL ["SPECIAL"]=> NULL ["TONDEUSE"]=> NULL ["VELO"]=> NULL } }
Auriez vous une solution ?
Solution pas très académique
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
<?php
$extractType = $bdd->query("SELECT DISTINCT TYPE FROM `parc` WHERE SESSION_UTILISATEUR='".$_SESSION['session_parc']."'");
while ($typeVehiculeExtrait = $extractType->fetch()){
$type=$typeVehiculeExtrait['TYPE'];
// On définit le tableau des 7 dernières années
for ($j = 0; $j <=6; $j++) {
// Définir le compteur de véhicule par an
$compteur=0;
$dateRecherche = new DateTime($date_fin); // Date de recherche
$dateRecherche->format('Y-m-d'); // Mettre la date au format
$annee=$dateRecherche->format('Y'); // Extraire l'année
$an=$annee-$j; // On extrait une année pour la référence du tableau
$tabKeyAn[$an]=$an;
// On va soustraire 1 an à la date
$dateRecherche->sub(new DateInterval('P'.$j.'Y'));
$dateSelect=$dateRecherche->format('Y-m-d');
$extractVehicule = $bdd->query("SELECT*FROM `parc` WHERE SESSION_UTILISATEUR='".$_SESSION['session_parc']."' AND PREMIERE_CIRCULATION<='".$dateSelect."' AND (DATE_DECLASSEMENT>='".$dateSelect."' OR DATE_DECLASSEMENT='0000-00-00') AND TYPE='".$type."'");
$additionAge =0;
while ($parametresVehiculeExtrait = $extractVehicule->fetch()){
// Définir le compteur de véhicule par an
$compteur=$compteur+1;
$pmc=date("Y-m-d", strtotime($parametresVehiculeExtrait['PREMIERE_CIRCULATION']));
$anneepmc=date("Y", strtotime($parametresVehiculeExtrait['PREMIERE_CIRCULATION']));
$declassement=date("Y-m-d", strtotime($parametresVehiculeExtrait['DATE_DECLASSEMENT']));
$anneeDeclassement=date("Y", strtotime($parametresVehiculeExtrait['DATE_DECLASSEMENT']));
$suppression=$parametresVehiculeExtrait['SUPPRESSION'];
$datetime1 = new DateTime($pmc);
$datetime2 = new DateTime($dateSelect);
$ageVehicule = $datetime1->diff($datetime2);
$ageVehicule=$ageVehicule->format('%d');
$additionAge=$ageVehicule+$additionAge;
}
if ($additionAge==0){// Eviter la division par zéro
$tabMoyenAgeVehiculeParType[$an][$type]=0;
}
else{
$tabMoyenAgeVehiculeParType[$an][$type]=round(($additionAge/$compteur),2);
}
$nombreVehicule[$an][$type]=$compteur;
}
$tabKeyType[$type]=$type;
}
$extractVehicule->closeCursor();
$extractType->closeCursor();
var_dump($tabMoyenAgeVehiculeParType);
?> |