[PHP] ESTRARRE DA DB VALORE MASSIMO E MINIMO IN UN INTERVALLO IMPOSTABILE A PIACERE

buondi programmatori! forte dei vostri consigli, ho riorganizzato il mio file come segue:
Codice:
<?php

require_once("config.php");
$con = mysqli_connect($server, $user, $pwd, $db);

$data1 = "2017-05-24 00:00";
$data2 = "2017-05-24 23:59";

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY TEMP DESC LIMIT 1";
$rismax = mysqli_query($con, $sql);
$riga_massima = mysqli_fetch_assoc($rismax);
$data_ora_max = $riga_massima['TIMESTAMP_LOCAL'];
$temp_max = $riga_massima['TEMP'];
$hum_max = $riga_massima['HUM'];
$pres_max = $riga_massima['PRESSURE'];
$vento_max = $riga_massima['WIND_AVE'];
$vento_max_gust = $riga_massima['WIND_GUST'];
$gg_h_max = explode(" ", $data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY TEMP LIMIT 1";
$rismin = mysqli_query($con, $sql);
$riga_minima = mysqli_fetch_assoc($rismin);
$data_ora_min = $riga_minima['TIMESTAMP_LOCAL'];
$temp_min = $riga_minima['TEMP'];
$hum_min = $riga_minima['HUM'];
$pres_min = $riga_minima['PRESSURE'];
//se ti serve la data e l'ora e forse meglio perche potrest cercare nell'intevallo di più giorni
$gg_h = explode(" ", $data_ora);
?>

<!DOCTYPE html>
<html manifest="demo.manifest"><head><meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>estremi oggi</title>
</head>
<body bgcolor="silver">
<p><span style="font-family: verdana; font-size: 48px;">MINIMI E MASSIMI</span></p>
<p><span style="font-family: verdana; font-size: 44px;">del giorno <?php echo $data1; ?></span><p>
    <ul>
<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">TEMPERATURA</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo $temp_min; ?>°C alle ore</span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo $temp_max; ?>°C alle ore </span></p></li>
<br></br>   

    <li><p><span style="font-family: verdana; font-size: 40px;">UMIDITA'</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo $hum_min; ?>% alle ore</span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo $hum_max; ?>% alle ore</span></p>

<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">PRESSIONE</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo round($pres_min, 1); ?> mb alle ore</span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo round($pres_max, 1); ?> mb alle ore</span></p>

<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">VENTO</span></p>
<p><span style="font-family: verdana; font-size: 30px;">intensita' massima: <?php echo floor($vento_max); ?> Km/h alle ore</span></p>
<p><span style="font-family: verdana; font-size: 30px;">punta massima: <?php echo round($vento_max_gust, 1); ?> Km/h alle ore</span></p>
</html>

ho aggiunto una query in più per i valori minimi e un po' di html per stampare i risultati (tra php e html, sono un po' meno ignorante di html :) )... potete vedere il risultato al seguente indirizzo:

http://www.meteolucignano.net/minmaxoggi1.php

i valori minimi e massimi sono esatti (ho controllato manualmente).. quello che ancora non mi è chiaro è la gestione degli orari relativi, in particolare la riga 18 ($gg_h_max = explode(" ", $data_ora). Per "distinguere" i risultati delle due query, ho aggiunto a "$ris" rispettivamente "max" e "min"... ditemi se ho fatto bene o male...
 
OK RAGAZZI! TUTTO FUNZIONANTE! POTETE CANCELLARE I MEX PRECEDENTI E VEDERE IL RISULTATO AL SOLITO INDIRIZZO DI PROVA

http://www.meteolucignano.net/minmaxoggi1.php

ho fatto una query per ogni valore (temp, umidità, pressione e vento), forse c'era uan scorciatoia, ma funziona!

Codice:
<?php

require_once("config.php");
$con = mysqli_connect($server, $user, $pwd, $db);

$data1 = "2017-05-24 00:00";
$data2 = "2017-05-24 23:59";

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY TEMP DESC LIMIT 1";
$rismax = mysqli_query($con, $sql);
$riga_massima = mysqli_fetch_assoc($rismax);
$temp_max_data_ora = $riga_massima['TIMESTAMP_LOCAL'];
$temp_max = $riga_massima['TEMP'];
$gg_temp_max = explode(" ", $temp_max_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY TEMP LIMIT 1";
$rismin = mysqli_query($con, $sql);
$riga_minima = mysqli_fetch_assoc($rismin);
$temp_min_data_ora = $riga_minima['TIMESTAMP_LOCAL'];
$temp_min = $riga_minima['TEMP'];
$gg_temp_min = explode(" ", $temp_min_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY HUM DESC LIMIT 1";
$rismax = mysqli_query($con, $sql);
$riga_massima = mysqli_fetch_assoc($rismax);
$hum_max_data_ora = $riga_massima['TIMESTAMP_LOCAL'];
$hum_max = $riga_massima['HUM'];
$gg_hum_max = explode(" ", $hum_max_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY HUM LIMIT 1";
$rismin = mysqli_query($con, $sql);
$riga_minima = mysqli_fetch_assoc($rismin);
$hum_min_data_ora = $riga_minima['TIMESTAMP_LOCAL'];
$hum_min = $riga_minima['HUM'];
$gg_hum_min = explode(" ", $hum_min_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY PRESSURE DESC LIMIT 1";
$rismax = mysqli_query($con, $sql);
$riga_massima = mysqli_fetch_assoc($rismax);
$pres_max_data_ora = $riga_massima['TIMESTAMP_LOCAL'];
$pres_max = $riga_massima['PRESSURE'];
$gg_pres_max = explode(" ", $pres_max_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY PRESSURE LIMIT 1";
$rismin = mysqli_query($con, $sql);
$riga_minima = mysqli_fetch_assoc($rismin);
$pres_min_data_ora = $riga_minima['TIMESTAMP_LOCAL'];
$pres_min = $riga_minima['PRESSURE'];
$gg_pres_min = explode(" ", $pres_min_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY WIND_AVE DESC LIMIT 1";
$rismax = mysqli_query($con, $sql);
$riga_massima = mysqli_fetch_assoc($rismax);
$wind_max_data_ora = $riga_massima['TIMESTAMP_LOCAL'];
$wind_max = $riga_massima['WIND_AVE'];
$gg_wind_max = explode(" ", $wind_max_data_ora);

$sql = "SELECT * FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2' ORDER BY WIND_GUST DESC LIMIT 1";
$rismin = mysqli_query($con, $sql);
$riga_minima = mysqli_fetch_assoc($rismin);
$wind_gust_max_data_ora = $riga_minima['TIMESTAMP_LOCAL'];
$wind_gust_max = $riga_minima['WIND_GUST'];
$gg_wind_gust_max = explode(" ", $wind_gust_max_data_ora);
?>

<!DOCTYPE html>
<html manifest="demo.manifest"><head><meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>estremi oggi</title>
</head>
<body bgcolor="silver">
<p><span style="font-family: verdana; font-size: 48px;">MINIMI E MASSIMI</span></p>
<p><span style="font-family: verdana; font-size: 44px;">del giorno <?php echo $data1; ?></span><p>
    <ul>
<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">TEMPERATURA</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo $temp_min; ?>°C alle ore <?php echo $temp_min_data_ora; ?></span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo $temp_max; ?>°C alle ore <?php echo $temp_max_data_ora; ?></span></p></li>
<br></br>   

    <li><p><span style="font-family: verdana; font-size: 40px;">UMIDITA'</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo $hum_min; ?>% alle ore <?php echo $hum_min_data_ora; ?></span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo $hum_max; ?>% alle ore <?php echo $hum_max_data_ora; ?></span></p>

<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">PRESSIONE</span></p>
<p><span style="font-family: verdana; font-size: 30px;">minima: <?php echo round($pres_min, 1); ?> mb alle ore <?php echo $pres_min_data_ora; ?></span></p>
<p><span style="font-family: verdana; font-size: 30px;">massima: <?php echo round($pres_max, 1); ?> mb alle ore <?php echo $pres_max_data_ora; ?></span></p>

<br></br>

<li><p><span style="font-family: verdana; font-size: 40px;">VENTO</span></p>
<p><span style="font-family: verdana; font-size: 30px;">intensita' massima: <?php echo floor($wind_max); ?> Km/h alle ore <?php echo $wind_max_data_ora; ?></span></p>
<p><span style="font-family: verdana; font-size: 30px;">punta massima: <?php echo floor($wind_gust_max); ?> Km/h alle ore  <?php echo $wind_gust_max_data_ora; ?></span></p>
</html>

adesso mi servirebbe togliere la data dalla data e ora di ogni valore (massimo e minimo) e anche lo 00:00 a destra della data in cima alla pagina (MINIMI E MASSIMI DEL GIORNO 2017-05-24 00:00) e magari poter trasformare la americana data (2017-05-24... quant'è brutta) in un più leggibile formato europeo: 24-05-2017, magari col giorno della settimana e col mese a lettere...

mercoledi 24 maggio 2017

sarebbe perfetto!!!
 
ciao
non so se funziona, ma prova questo script
ATTENTO nell'array metti i nomi giusti
PHP:
<?php
//connessione........
$nomi_campi=array('temperatura', 'pressione','vento');//da mettere i nomi dei campi esatti come sono in tabella

$data1 = $_POST['data_1']." 00:00";//o mettere direttamente i valori
$data2 = $_POST['data_2']." 23:59";
echo "nel periodo ".$_POST['data_1']." - ".$_POST['data_2']."<br>";//se i valori modificare
foreach($nomi_campi as $nome_campo){
    $sql = "SELECT MAX($nome_campo) as max, MIN($nome_campo) as min FROM METEO WHERE TIMESTAMP_LOCAL between '$data1' and '$data2'";
    $ris=mysqli_query($conn, $sql);
    $riga=mysqli_fetch_assoc($ris);
    $max[$nome_campo]=$riga['max'];
    $min[$nome_campo]=$riga['min'];
    //query per la ricerca ora del massimo
    $sql_max="SELECT data FROM meteo WHERE TIMESTAMP_LOCAL (between '$data1' and '$data2') and ($nome_campo=".$max[$nome_campo].") LIMIT 1";
    $ris_max=mysqli_query($conn, $sql_max);
    $riga_max=mysqli_fetch_assoc($ris_max);
    $data_max=explode(" ",$riga_max['TIMESTAMP_LOCAL']);
    $sql_min="SELECT data FROM meteo WHERE TIMESTAMP_LOCAL (between '$data1' and '$data2') and ($nome_campo=".$min[$nome_campo].") LIMIT 1";
    $ris_min=mysqli_query($conn, $sql_min);
    $riga_min=mysqli_fetch_assoc($ris_min);
    $data_min=explode(" ",$riga_min['TIMESTAMP_LOCAL']);
   
    echo "$nome_campo MAX ".$max[$nome_campo]."alle ore ".$data_max[1]." - MIN ".$min[$nome_campo]." alle ore ".$data_min[1]."<br>";
}
//....
?>
dovresti ottenere esempio un output simile a questo
nel periodo 2017-05-24 - 2017-05-24
temperatura MAX 37 alle ore 12:30 - MIN 21 alle ore 07:15
pressione MAX 10 alle ore 11:21 - MIN 9 alle ore 12:33
vento MAX 10 alle ore 15.38 - MIN 7 alle ore 18:20
provalo a parte se ti interessa
 
Ultima modifica:
MA CERTO CHE MI INTERESSA! piuttosto, al posto di "$nome_campo" devo mettere il nome esatto del campo in tabella (TEMP, HUM, etc..)...e al posto di "$nomi_campi"? cioè

foreach($nomi_campi as $nome_campo)

qui come li devo sostituire?
 
ciao
nell'array
$nomi_campi=array('TEMP', 'HUM','....ecc...');
comunque verifica anche che non abbia fatto errori di battitura, es tra 'temperatura', 'pressione' avevo messo un . al posto della ,
 
mmm mi pare più complesso del mio script di prima... non c'è un modo per gestire la data e ora e stampare a video solo la data o solo l'ora?
 
ciao

se vuoi il MAX e il MIN devi comunque estrarre la data relativa al quel MAX e a quel MIN, esempio semplificato

se nella tua tabella hai ad esempio (tralascio la parte della data aa-mm-gg) e mi limito a due parametri

id---data------temperatura---vento
20---07:30---20-------------- 5
21---07:35---21---------------8
22---07:40---31---------------2
23---07:45---28-------------- 9
ecc…

ora se vuoi il massimo e il minimo della temperatura e del vento e la data o l’ora in cui si sono verificati devi estrarre

per temperatura massima (31) la data/ora -> 07:40 per la minima (20) la data/ora -> 07:30

analogamente per il vento massimo (9) -> 07:45, minimo (2) -> 07:40

come vedi per ogni max/min e parametro devi estrarre una data/ora e comunque o esplodi il valore del campo TIMESTAMP_LOCAL e quindi la dividi o la usi completa senza esploderla
 
ciao
$data_min=explode(" ",$riga_min['TIMESTAMP_LOCAL']);//esplode in funzione dello spazio aa-mm-dd hh:ii
$data_min[0] ->aa-mm-dd
$data_min[1] ->hh:ii
 
buondì a tutti! adesso tutto ottimamente funzionante! potete dare una occhiata all'indirizzo (definitivo)

http://www.meteolucignano.net/minmax_giorno_sel.php

che potete trovare navigando il sito

www.meteolucignano.net

ho aggiunto anche il valore della pioggia caduta all'interno della giornata (un gioco da ragazzi una volta capito il modo di impostare le query). Per ora è molto molto spartano, vedrò di migliorarlo nella grafica e di aggiungere altre pagine per interrogare in modo più "elastico" il DB; per ora è tutto rinvenibile cliccando su "STORICO" all'interno del suddetto indirizzo.

NB il database ha cominciato a registrare il 19 dicembre 2015 ma ogni tanto c'è qualche "buco": valori non registrati o registrati male per blocchi del sw, mancanza di corrente o di connessione internet... considero il DB attendibile dallo scorso gennaio.
 
mi manca solo sapere come poter dare a "$data1" il valore della data corrente

$data1 = "2017-05-25 00:00"

magari SOLO LA DATA, poi l'ora la aggiungo da me, ormai ho imparato :)

Ho cercato in giro per il web ma non sono arrivato a nulla; mi serve per poter fare i report del giorno corrente, senza dover inserire ogni volta la data odierna.
 
ciao
un piccolo consiglio: verifica le date immesse, esempi
immessa 25/05/2017 visualizza la data ma non mostra nulla
immessa 31-02-2017 come sopra

quindi dovresti fare in modo che
1) le date vengano trasformate in YYYY-mm-dd
2) avvisi che la data è assurda e non mostri nulla tornando allla casella di input
 
grazie dei preziosi consigli! intanto ho utilizzato la funzione per richiamare la data corrente per costruire queste tre righe sopra il grafico dell'andamento della temperatura giornaliera:

http://www.meteolucignano.net/smartphone_temp.php

al più presto farò lo stesso anche per gli altri valori, così che a colpo d'occhio sarà visibile sia l'andamento del giorno corrente di ciascun valore sia i min e max.

Nella pagina

http://www.meteolucignano.net/swpi_plot.php

in cui impostando un giorno a piacere ti disegna i grafici di ciascun valore, inserirò anche i rispettivi min e max. In questo modo unisco in una sola pagina grafici e min/max del giorno corrente, in un'altra grafici e min/max di un giorno a piacere;

l'unica cosa è che CI VUOLE PAZIENZA E TEMPO... la prima ne ho a sufficienza... il secondo un po' meno :):):).

NON SO DAVVERO COME RINGRAZIARVI, SIETE STATI GENTILISSIMI E MOLTO PAZIENTI!
 
buondi ragazzi! il progetto sta marciando, mi manca solo un pomeriggio libero per poterlo terminare. Domanda: dopo aver esploso la data e ora, come faccio a restituire nel formato gg-mm-aaaa la "porzione" $data[0]"? qui sotto il codice:

Codice:
$data=explode(" ",$data1);
$data[0] ->aaaa-mm-gg;
$data[1] ->hh-ii;
 

Discussioni simili