Page 1 sur 1

Optimisation requête

Posté : 07 mai 2023, 18:14
par JP54
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.

Re: Optimisation requête

Posté : 08 mai 2023, 11:23
par PascalWMR
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

Re: Optimisation requête

Posté : 08 mai 2023, 11:45
par JP54
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.

Re: Optimisation requête

Posté : 08 mai 2023, 11:59
par PascalWMR
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 ;)

Re: Optimisation requête

Posté : 08 mai 2023, 18:00
par JP54
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 ;)