Optimisation requête

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

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

Répondre
JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Optimisation requête

Message par JP54 » 07 mai 2023, 18:14

Bonjour,
Je récupère à l'aide d'une requête la température maxi et mini des dernières 24 heures.
Pour récupérer les tstamp de ces deux valeurs, j'utilise deux requêtes. Ca fonctionne mais le temps chargement est assez long, ce sont les deux requêtes pour récupérer le tstamp qui allongent le temps de chargement de la page.

Code : Tout sélectionner

//température maxi et mini
            $sql=("SELECT max(outdoortemperature) as temp_max, min(outdoortemperature) as temp_min FROM data WHERE tstamp >= '$start' and  tstamp <= '$stop' ORDER BY 1");
                        if ($resultat = mysqli_query($conn,$sql)) {
                        while ($donnees = mysqli_fetch_object($resultat))
                        {
                        $cont=$donnees ;                
                        $temp_max = $cont->temp_max;
                        $temp_min = $cont->temp_min;
                       
						}						                                     
                         mysqli_free_result($resultat);
                        }

     //date et heure température maxi						   
            $sql1="SELECT tstamp FROM `data` WHERE outdoortemperature = '$temp_max'"; 
					        if ($resultat = mysqli_query($conn,$sql1)) {
                                while ($donnees = mysqli_fetch_object($resultat))
                               {
                                $cont=$donnees ;                                               
                                $tstamp_temp_max      = $cont->tstamp;								
                               }
                                mysqli_free_result($resultat);                        
                               }

     //date et heure températuremini							   
            $sql2="SELECT tstamp FROM `data` WHERE outdoortemperature = '$temp_min'"; 
					        if ($resultat = mysqli_query($conn,$sql2)) {
                                while ($donnees = mysqli_fetch_object($resultat))
                               {
                                $cont=$donnees ;                                               
                                $tstamp_temp_min      = $cont->tstamp;								
                               }
                                mysqli_free_result($resultat);                        
                               }

Y a-t-il un moyen pour optimiser les requêtes afin que le chargement soit plus court. Les résultats de ces requêtes sont destinées à un tableau et non à un graphique.
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

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

Re: Optimisation requête

Message par PascalWMR » 08 mai 2023, 11:23

Salut Pascal

Tu veux quoi les températures des 24 dernières heures glissantes ou de la dernière journée ?
Parce-que sinon, il y a tout ce qui faut dans la table minimaxi
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

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: Optimisation requête

Message par JP54 » 08 mai 2023, 11:45

Je voudrais la température maxi et mini ainsi que les tstamp sur les 24 dernières heures glissantes, c'est pour ça que j'ai pris la table data.
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

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

Re: Optimisation requête

Message par PascalWMR » 08 mai 2023, 11:59

Re

Il y a beaucoup plus rapide de MAX() ou MIN() qui sont des fonctions d'agrégation
Tu as besoin de 2 requêtes, une pour le max et une pour le min

Pour le max c'est ORDER BY 2 DESC

Code : Tout sélectionner

SELECT tstamp, outdoortemperature FROM data WHERE tstamp>=".$stop." ORDER BY 2 DESC LIMIT 1;
Pour le min c'est exactement la même requete mais ORDER BY 2 ASC

That all folks ;)
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

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: Optimisation requête

Message par JP54 » 08 mai 2023, 18:00

J'aurais du y penser, merci Pascal.
Dominique m'a donner une autre solution qui fonctionne également, rajouter un start et stop sur les requêtes pour chercher le tstamp.

Code : Tout sélectionner

 $sql="SELECT  tstamp FROM `data` WHERE outdoortemperature = $temp_max AND tstamp >= '$start' and  tstamp <= '$stop'";
Merci à vous deux ;)
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Répondre