ESTRARRE VALORI MASSIMI E MINIMI IN UN INTERVALLO DI RECORD

giacomo9783

Utente Attivo
24 Ago 2016
80
0
6
37
sono nuovo qui, mi sto avvicinando a mysql per lo sviluppo di un sito meteorologico

www.meteolucignano.net

in una tabella (METEO) vengono registrati tutti i valori meteorologici (temperatura, umidità, etc...) affiancati ad un timestamp che riporta la data e l'ora della registrazione di ogni record.

Vorrei poter estrarre e stampare a video i valori massimi e minimi di un giorno selezionabile a piacere dal visitatore; in pratica dovrei estrarre il valore massimo e minimo di ogni colonna (temperatura, umidità, etc...) fra tutti i record che riportano la data inserita dall'utente; visto che ci siamo, sarebbe una gran cosa anche poter stampare a video il corrispondente orario, estraibile dal timestamp. A dirsi pare facile, ma a farsi.. sono nel pallone più totale. Ogni aiuto/suggerimento è ben accetto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male un utente inserisce una data (intanto in che formato? es gg.mm.aaaa?)
detto questo per prima cosa devi trassformare la data in timestamp usando mktime crendo l'intervallo del giorno
esempio schematico
PHP:
<?php
$data="25/08/2016";
$ore_zero= mktime ([ 0, 0,0,8, 25, 2016);
$ore_dodici=mktime ([ 59, 59,59,8, 25, 2016);
//così hai creato l'intervallo del giorno
//poi fai la querry (metto i nomi a caso
$q="SELECT min(temperatura) as t_min max(temperatura) as t_max FROM tabella WHERE data BETWEN $ore_zero AND $ore_dodici";
$ris=mysqli_query($connessione, $q);
$riga=mysqli_fetch_array(£ris);
echo "il giorno $data: temperatura minima ".$riga['t_min']." temperatura massima ".$riga['t_max']."<br>";
?>
prova così evidentemente adattandolo alle tue esigenze
 

giacomo9783

Utente Attivo
24 Ago 2016
80
0
6
37
vorrei creare un form (in php) in cui l'utente inserisce il giorno (gg/mm/aaaa) e cliccando su un bottone visualizza i valori massimi e minimi del giorno inserito. Il nodo cruciale, per me, è interrogare il database per poter ottenere i massimi e minimi della data inserita (e magari anche la rispettiva ora); ripeto, nalla tabella "meteo", ogni riga riporta la data e l'ora, e tutti i valori meteo (temperatura, umidità, etc...) esempio

TIME STAMP LOCAL TEMPERATURA UMIDITA' PRESSIONE
2016-08-25 13:16:30 27,1 24 1021
2016-08-25 13:21:30 27,3 23 1021
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
intanto da quello che vedo la data non è in timestamp (ricorda il timestamp è spresso in secondi)
poi ci do un occhio e spero di saperti dire
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
quindi devi fare un form in cui l'utente possa mettere la data, però devi stare attento perche le date sono sempre una rogna e prima di usarle vanno verificate.
nel form forse ti convine mettere 3 campi select in cui l'utente puo scegliere l'anno il mese ed il giorno, oppure mettere un datapiker (lo trovi anche su google)
ipotizzioamo che l'utente selezioni l'anno il mese e il giorno quindi dalla parte php avrai i tuoi $_POST
PHP:
<?php
//dati connessione
//...se fai nella stessa pagina qui ci sara l'if isset($_POST['submit']
$anno=$_POST['anno'];//in formato AAAAA es 2016
$giorno=$_POST['giorno']; //in formato gg es 27
$mese=$_POST['mese'];// in formato mm es 08
//prima fai la verifica
if(!checkdate ( (int)$mese , (int)$giorno , (int)$anno )){
    echo "la data inserita NON è corretta";
    //e rimandi dove vuoi es al form
}else{
    //da come scrivi tu hai le date nel formato 2016-08-25 13:16:30
    /*quindi l'intervallo di un giorno va es da
     2016-08-25 00:00:00
     a
     2016-08-25 59:59:59
    quindi con i dati dai $_POST ti costruisci l'intervallo
    */
    $inizio="$anno-$mese-$giorno 00:00:00";
    $fine="$anno-$mese-$giorno 59:59:59";
    // fai la query aggiungendo i nomi dei campi per umidità e pressione (non so come si chiama il campo della data)
    $q="SELECT min(temperatura) as t_min max(temperatura) as t_max FROM meteo WHERE data BETWEN $inizio AND $fine";
    $ris=mysqli_query($connessione, $q);
    if(mysqli_num_rows($ris)){
        echo "non ci sono valori per la data inserito";
        //e rimandi dove vuoi es al form
    }else{
        $riga=mysqli_fetch_array(£ris);
        var_dump($riga);//ho messo un var_dump ma tu metterai quello che ti serve
    }
}
//...............
?>
prova, ala massimo non funziona
 

giacomo9783

Utente Attivo
24 Ago 2016
80
0
6
37
Credo che sia proprio quello che cercavo di fare per quanto riguarda il form per interrogare il database. Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa ho fatto un errore, se pensi che ti serve correggi
$fine="$anno-$mese-$giorno 59:59:59";
in
$fine="$anno-$mese-$giorno 23:59:59";