Requête qui ne fonctionne pas pour l'année en cours

Un problème, une question sur la partie PHP des graphiques

Modérateurs : jturlier, Météo Villarzel

Répondre
Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Requête qui ne fonctionne pas pour l'année en cours

Message par Météo Villarzel » 24 févr. 2015, 15:48

Salut,

Je m'adresse particulièrement à Pascal, vu que j'utilise une de ces requêtes, mais si quelqu'un d'autre à la solution, je suis preneur.
Je cherche depuis un mois pourquoi mes graphiques de comparaisons avec les normales fonctionnent nickel pour toutes les années, sauf pour l'année courante, il me semble en plus que je n'avais pas ce problème l'année passée.

Par exemple ces fichiers pour la pluviométrie, il n'y a que l'année 2015 qui foire
http://www.boock.ch/meteo/pluie-comparatif-normes.php

Code : Tout sélectionner

<?php
// appel du script de connexion
require("mysqli_connect.php");                     

// ************* Attention mes scripts, suivant les conseils de "helmain", utilisent tous des requêtes MYSQLI. Donc, adaptez les requêtes si vous utilisez toujours MYSQL ************

// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données de l'année en cours.
$anneeencours=date("2015"); // Variable servant à l'affichage des données sur l'axe xAxis du graphique
$debut = mktime(0, 0, 0, 1, 1,2015); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2013)
$start= date("YmdHi", $debut);
$fin= mktime(0, 0, 0, 1, 1,2016); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2014)
$stop= date("YmdHi", $fin);
$makemoisencours= mktime(0, 0, 0, 1, 1,2016); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2014)
$moisencours=date("YmdHi", $makemoisencours); // Variable servant à déterminer à partir de quand la valeur de la variable $CumulMensuel[$i] devient NULL pour éviter l'affichage répétitif de la même valeur j'usqu'a la fin de l'année

// On défini un tableau $CumulNormaleMensuelle qui sert à calculer la différence entre les cumul normal et les cumul mensuel
// Les normales cumulées ci dessous sont celle de la station Météo France de Metz Marly-Frescaty valable pour ma station.
$CumulNormaleMensuelle[2] = 53;
$CumulNormaleMensuelle[3] = 100;
$CumulNormaleMensuelle[4] = 160;
$CumulNormaleMensuelle[5] = 228;
$CumulNormaleMensuelle[6] = 318;
$CumulNormaleMensuelle[7] = 408;
$CumulNormaleMensuelle[8] = 496;
$CumulNormaleMensuelle[9] = 591;
$CumulNormaleMensuelle[10] = 675;
$CumulNormaleMensuelle[11] = 761;
$CumulNormaleMensuelle[12] = 825;
$CumulNormaleMensuelle[13] = 891;

// On creer une variable $stoppourcumul qui servira à extraire les cumul mensuel
for ($i = 2; $i < 13; $i++) {
   $makestoppourcumul[$i]= mktime(0,0,0,$i,1,2015); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0,0,0,$i,1,2013)
   $stoppourcumul[$i]=date("YmdHi", $makestoppourcumul[$i]);
};
$stoppourcumul[13]=$stop; // la dernière variable est définie séparément car elle doir être égale à $stop soit année en cours + 1

// Récupération des cumuls dans la BDD
   $i=2;
   while ($i<14){
      $sql = "select sum(Rain_jour) from MiniMaxidata where recdateTZ >= $start and recdateTZ < $stoppourcumul[$i]";
$query = mysqli_query($conn,$sql);                  
$list=mysqli_fetch_array($query); 
      if ($stoppourcumul[$i] > $moisencours) {      
         $CumulMensuel[$i]= 'null';
         $DifferenceCumul[$i]= 'null';
      }
      else {
         $CumulMensuel[$i]=$list['sum(Rain_jour)']*1;
         $DifferenceCumul[$i]= $CumulMensuel[$i] - $CumulNormaleMensuelle[$i];
      }
      $i++;
   }
                   

// Récupération des données Rain_jour pour grapher les précipitations mensuelles de l'année pour les afficher via la fonction dataGrouping de highcharts


$sql = "SELECT tstamp, Rain_jour FROM MiniMaxidata WHERE recdateTZ >= $start AND recdateTZ < $stop";  
$query = mysqli_query($conn,$sql);                  
$i=0;
while ($list = mysqli_fetch_assoc($query)) {      
if (date("I",time())==0) { 
   $time[$i]=($list['tstamp']+3600)*1000;
   } 
else {
   $time[$i]=($list['tstamp']+7200)*1000;
  } 

$Rain_jour[$i]=$list['Rain_jour']*1;

$i++;
}    
  ?>
A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Requête qui ne fonctionne pas pour l'année en cours

Message par PascalWMR » 24 févr. 2015, 20:33

Salut Pierre-André

zarbi ton graphique.

J'ai relevé plusieurs erreur dans ton code.
Ici
$anneeencours=date("2015"); // Variable servant à l'affichage des données sur l'axe xAxis du graphique
ça peut pas marcher soit tu met $anneeencours=2015 ou $anneeencours=date("Y")

ici
$makemoisencours= mktime(0, 0, 0, 1, 1,2016); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2014)
Ça ne peut pas marcher non plus car tu déclare que le moi en cours est le 1/1/2016 alors que pour le mois de février ca devrait etre 0,0,0,3,1,2015

Le souci, c'est que tu a mis toutes les dates en dur.
Cette solution est valable pour les années écoulées car dans ce cas le script ne tiens pas compte du mois en cour. Il lui faut juste un début le 1/1/YYYY et une fin.1/1/YYYY+1
Le calcul avec le mois en cour sert justement à mettre les variables des mois non encore écoulés à null pour éviter leur affichage.
Par contre pour l'année en cours tu devrais garder garder les dates calculées.
Regarde mon Graphique pour l'année en cour tu doit avoir ceci.

Un autre truc bizarre. :shock: Il me semble que tu a mélangé 2 scripts car dans le mien je ne récupère pas la donnée Rain_jour pour m'en servir avec la fonction datagrouping.
Zoom au max ton graphique, tu verra que les précipitations journalières apparaissent :!: :!: :!: .
Zoom au max le mien, tu verra que l'affichage reste le même.

Je te remet le script original.

Code : Tout sélectionner

<?php
// appel du script de connexion
require("../Scripts/mysqli_connect.php");                     

// ************* Attention mes scripts, suivant les conseils de "helmain", utilisent tous des requêtes MYSQLI. Donc, adaptez les requêtes si vous utilisez toujours MYSQL ************

// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données de l'année en cours.
$anneeencours=date("Y"); // Variable servant à l'affichage des données sur l'axe xAxis du graphique. A changer pour une autre année: exemple pour 2013, $anneeencours=2013
$debut = mktime(0, 0, 0, 1, 1, date("y")); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2013)
$start= date("YmdHi", $debut);
$fin= mktime(0, 0, 0, 1, 1, date("y")+1); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2014)
$stop= date("YmdHi", $fin);
$makemoisencours= mktime(0, 0, 0, date('m')+1, 1, date('Y')); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 1, 1,2014)
$moisencours=date("YmdHi", $makemoisencours); // Variable servant à déterminer à partir de quand la valeur de la variable $CumulMensuel[$i] devient NULL pour éviter l'affichage répétitif de la même valeur j'usqu'a la fin de l'année
if (date("m")*1 <= '6'){
	$posxtooltip = 750;}
else {$posxtooltip=82;}

// On défini en premier lieu deux tableaux Primaire avec les normales mensuelles et les normales mensuelles cumulées. Ils serviront à calculer les valeurs définitives des normales mensuelles et des normales mensuelles cumulées. 

// On défini un tableau $PrimNormaleMensuelle (comme Primaire Normale Mensuelle) qui sert à calculer la différence entre les précipitation du mois et les normales mensuelles
// Les normales ci dessous sont celle de la station Météo France de Metz Marly-Frescaty valable pour ma station.

$PrimNormaleMensuelle[1] = 64.2; // Janvier
$PrimNormaleMensuelle[2] = 56.9; // Fevrier
$PrimNormaleMensuelle[3] = 61.3; // Mars
$PrimNormaleMensuelle[4] = 50.5; // Avril
$PrimNormaleMensuelle[5] = 58.9; // Mai
$PrimNormaleMensuelle[6] = 61.7; // Juin
$PrimNormaleMensuelle[7] = 63.7; // Juillet
$PrimNormaleMensuelle[8] = 60.8; // Aout
$PrimNormaleMensuelle[9] = 62.7; // Septembre
$PrimNormaleMensuelle[10] = 71.8; // Octobre
$PrimNormaleMensuelle[11] = 64.0; // Novembre
$PrimNormaleMensuelle[12] = 78.8; // Décembre

// On défini un tableau $PrimCumulNormaleMensuelle qui sert à calculer la différence entre les cumuls des normales et les cumuls des précipitations mensuelles
// Les normales cumulées ci dessous sont celle de la station Météo France de Metz Marly-Frescaty valable pour ma station.
// La variable $CumulNormaleMensuelle est incrémentée de 2 à 13 car dans la requete et les calculs des valeurs suivantes, la valeur de la variable $i servant à incrémenter ces valeur et en particulier $stoppourcumul doit être égale au mois à extraire +1. Exemple pour extraire Janvier, $i doit être égal à 2
$PrimCumulNormaleMensuelle[2] = 64.2;
$PrimCumulNormaleMensuelle[3] = 121.1;
$PrimCumulNormaleMensuelle[4] = 182.4;
$PrimCumulNormaleMensuelle[5] = 232.9;
$PrimCumulNormaleMensuelle[6] = 291.8;
$PrimCumulNormaleMensuelle[7] = 353.5;
$PrimCumulNormaleMensuelle[8] = 417.2;
$PrimCumulNormaleMensuelle[9] = 478.0;
$PrimCumulNormaleMensuelle[10] = 540.7;
$PrimCumulNormaleMensuelle[11] = 612.5;
$PrimCumulNormaleMensuelle[12] = 676.5;
$PrimCumulNormaleMensuelle[13] = 755.3;

// On creer une variable $stoppourcumul qui servira à extraire les cumuls mensuels
for ($i = 2; $i < 13; $i++) {
	$makestoppourcumul[$i]= mktime(0,0,0,$i,1,date("y")); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0,0,0,$i,1,2013)
	$stoppourcumul[$i]=date("YmdHi", $makestoppourcumul[$i]);
};
$stoppourcumul[13]=$stop; // la dernière variable est définie séparément car elle doir être égale à $stop soit année en cours + 1

// Récupération des cumuls dans la BDD
	$i=2;
	while ($i<14){
		$sql = "select sum(Rain_jour) from MiniMaxidata where recdateTZ >= $start and recdateTZ < $stoppourcumul[$i]";
		$query = mysqli_query($conn,$sql);
		$list = mysqli_fetch_assoc($query);
		if ($stoppourcumul[$i] > $moisencours) {      
			// Pour ne pas afficher la même données jusqu'a la fin de l'année, si la var $stoppourcumul[$i] est > au mois en cours, on met les différentes variables à NULL
			$CumulMensuel[$i]= 'null';
			$DifferenceCumul[$i]= 'null';
			$CumulNormaleMensuelle[$i]= 'null';
		}
		else {
			// Sinon, on récupère la valeur de ces variables dans les tableau Primaires ci-dessus
			$CumulMensuel[$i]=$list['sum(Rain_jour)']*1;
			$CumulNormaleMensuelle[$i]= $PrimCumulNormaleMensuelle[$i];
			$DifferenceCumul[$i]= $CumulMensuel[$i] - $CumulNormaleMensuelle[$i];
		}
		$i++;
	}
                   

// Récupération des données Rain_jour pour grapher les précipitations mensuelles et les ecart par rapport aux normales mensuelles.

$makemoisencours= mktime(0, 0, 0, date('m'), 1, date('Y')); // Variable à changer pour grapher une autre année: exemple pour 2013, mktime(0, 0, 0, 12, 1,2013)
$moisencours=date("YmdHi", $makemoisencours); // Variable servant à déterminer à partir de quand la valeur de la variable $CumulMensuel[$i] devient NULL pour éviter l'affichage répétitif de la même valeur j'usqu'a la fin de l'année

// Récupération des cumuls mois par mois dans la BDD
	$i=1;
	while ($i<13){
		$sql = "select sum(Rain_jour) from MiniMaxidata where SUBSTR(recdateTZ,5,2)=$i AND recdateTZ >= $start AND recdateTZ < $stop";
		$query = mysqli_query($conn,$sql);
		$list = mysqli_fetch_assoc($query);
		if ($i > substr($moisencours,4,2)) {      
			// Pour ne pas afficher la même données jusqu'a la fin de l'année, si la var $i est > au mois en cours, on met les différentes variables à NULL
			$CumulDuMois[$i]= 'null';
			$DifferenceDuMois[$i]= 'null';
			$NormaleMensuelle[$i]= 'null';
		}
		else {
			// Sinon, on récupère la valeur de ces variables dans les tableau Primaires ci-dessus
			$CumulDuMois[$i]=$list['sum(Rain_jour)']*1;
			$NormaleMensuelle[$i]= $PrimNormaleMensuelle[$i];
			$DifferenceDuMois[$i]= $CumulDuMois[$i] - $NormaleMensuelle[$i];
		}
		$i++;
	}
  ?>
A+
Pascal
Modifié en dernier par PascalWMR le 10 mars 2019, 11:03, modifié 1 fois.
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Requête qui ne fonctionne pas pour l'année en cours

Message par Météo Villarzel » 24 févr. 2015, 22:41

Salut Pascal,

effectivement j'ai fait un savant mélange de script :roll:
Bon maintenant je comprends ce qui clochait, je vais refaire tous mes graphiques.

Merci beaucoup pour tes précieuses lumières.

Bonne fin de soirée

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Requête qui ne fonctionne pas pour l'année en cours

Message par jturlier » 25 févr. 2015, 08:57

Météo Villarzel a écrit :effectivement j'ai fait un savant mélange de script :roll:
Je dirais plutôt que tu es un adepte de la "nouvelle cuisine" :lol: :lol:

Jean
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Requête qui ne fonctionne pas pour l'année en cours

Message par Météo Villarzel » 25 févr. 2015, 09:25

jturlier a écrit : Je dirais plutôt que tu es un adepte de la "nouvelle cuisine" :lol: :lol:

Jean
Comme tous les grands chefs, j'expérimente :lol:
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

Répondre