[PHP] Estrarre dati da tabella e fare la media ad intervalli di tempo

samurai.sette

Utente Attivo
17 Dic 2015
234
6
18
Ciao a tutti. Mi trovo in una situazione un pò particolare ma non riesco a venirne fuori.
Da una tabella mysql vorrei estrarre tutti i dati di una colonna e fare la media dei valori inclusi ogni ora (ad esempio la media di tutti i valori compresi tra le ore 00:00 e 01:00, poi la media dei valori compresi tra le ore 01:00 e 02:00 e così per il resto di tutti i valori).
Qualcuno ha un consiglio su come muovermi?
Ciao, grazie mille.
 

Tommy03

Utente Attivo
6 Giu 2018
614
58
28
18
Vicenza
Prova così:
PHP:
for($i=0;$i<24;$i++){
if($i<10){
$numero=str_pad($i,2,0,STR_PAD_LEFT);
}else{
$numero=$i;
}
$orario=$numero.":00";
$fine=$numero+1;
$limite=$fine.":00";
$query=mysqli_query($conn,"SELECT AVG(nome_campo) AS media FROM tabella WHERE campo_orario>='$orario' AND campo_orario<='$orario'");
while($ricevi=mysqli_fetch_assoc($query)){
$media = $ricevi['media'];
echo "Tra le ore '.$numero.' e '.$limite.', la media è di '.$media.'";
}
}
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Semplificando un pò la questione evitando inutili cicli da codice e un numero di query spropositato, si potrebbe effettuare una (1) query ed ottenere tutti i risultati semplicemente con questo:
PHP:
$query='
SELECT
  DATE_FORMAT(datetime, "%d-%m-%Y") AS data,
  DATE_FORMAT(datetime, "%H") AS orario,
  AVG(val) AS med
FROM TABELLA
GROUP BY DATE_FORMAT(datetime, "%H"),
         DATE_FORMAT(datetime, "%d-%m-%Y")';
//questa riga è da cambiare
$data=$conn->query($query)->fetch_all();
print_r($data);
 
Ultima modifica:

samurai.sette

Utente Attivo
17 Dic 2015
234
6
18
Ciao ragazzi, grazie mille per l'aiuto. Devo dire che entrambe le soluzioni sono molto belle (si capisce subito che siete molto preparati in materia!).
Scusate se ne approfitto, ma se la media dei dati deve essere effettuata a intervalli di tempo di 3 ore? Ad esempio tra le ore 00:00 e le 03:00, poi tra le ore 03:00 e le 06:00 e così via.
Ciao, grazie mille!
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Nel post precedente, ho invertito Group BY!
GROUP BY DATE_FORMAT(datetime, "%H"),
DATE_FORMAT(datetime, "%d-%m-%Y")'
;
Corretto.....
Codice:
GROUP BY DATE_FORMAT(datetime, "%d-%m-%Y"),
DATE_FORMAT(datetime, "%H")

00:00 e le 03:00
Piccola precisazione... dalle 00:00 alle 02:59 poi dalle 03:00 alle 05:59 corretto?

intervalli di tempo di 3 ore
Per la nuova richiesta, sempre sfruttando solo il DB basterebbe dividere l'orario per il valore passato in questo caso "3".
Codice:
SELECT
  DATE_FORMAT(datetime, "%d-%m-%Y") AS data,
  FLOOR(DATE_FORMAT(datetime, "%H")/3) AS orario,
  AVG(val) AS med
FROM TABELLA
GROUP BY DATE_FORMAT(datetime, "%d-%m-%Y"),
        FLOOR(DATE_FORMAT(datetime, "%H")/3)
 
Ultima modifica:

samurai.sette

Utente Attivo
17 Dic 2015
234
6
18
Ciao ragazzi. Scusate se non ho risposto subito.
Per Macus_adi: grazie mille per l'aiuto, la tua soluzione funziona alla grande!!! :)
Per Tommy03: grazie mille anche a te, anche la tua soluzione è molto bella e funzionale. :)
Ciao!!!
 

samurai.sette

Utente Attivo
17 Dic 2015
234
6
18
Ciao ragazzi. Riapro questa discussione perché mi trovo in difficoltà nell'estrazione dei dati e nel fare la loro media ad intervalli di tempo.
L'aiuto che mi avevate dato è stato molto utile in quanto sono riuscito ad estrarre i dati e fare la loro media ad intervalli di tempo di 3 ore.
Ora mi trovo nella stessa situazione ma l'intervallo di tempo è passato da 3 ore a 30 minuti ma i dati che mi "genera" non sono corretti.
Quello che ho scritto è questo:
PHP:
<?php
    $con = mysqli_connect ("localhost", "root", "", "meco");
    $query = mysqli_query ($con, 'SELECT AVG(spostamento2) AS media FROM monit GROUP BY DATE_FORMAT(data, "%d-%m-%Y"), FLOOR (DATE_FORMAT(ora, "%H")/0.5)');
    while ($result = mysqli_fetch_assoc($query))
    {
        $dati[] = $result['media'];
    }
    echo "<pre>";
    print_r($dati);
    echo "</pre>";
?>
Vi riporto anche due immagini in cui faccio vedere i dati della tabella e i dati che mi genera il PHP.
tab.jpg
php.jpg

Ovviamente la tabella è molto più lunga (contiene 500 righe). Secondo voi dove sbaglio?
Ciao, grazie mille.
 
Ultima modifica:

Tommy03

Utente Attivo
6 Giu 2018
614
58
28
18
Vicenza
È un po' contorto ma potrebbe funzionare:
PHP:
for($i=0;$i<47;$i++){
$decimale=$i/2;
if(is_int($decimale) == 1){
$orario=$decimale.":00";
$limite=$decimale.":30";
}else{
$parteintera=intval($decimale);
$orario=$parteintera.":30";
$boh=$parteintera+1;
$limite=$boh.":00";
}
$query=mysqli_query($conn,"SELECT AVG(nome_campo) AS media FROM tabella WHERE campo_orario>='$orario' AND campo_orario<='$limite'");
while($ricevi=mysqli_fetch_assoc($query)){
$media = $ricevi['media'];
echo "Tra le ore '.$orario.' e '.$limite.', la media è di '.$media.'";
}
}
 

samurai.sette

Utente Attivo
17 Dic 2015
234
6
18
Ciao Tommy03, scusa se non ho risposto subito ma sono stato un po' impegnato.
Il codice che mi hai scritto funziona abbastanza bene.
Grazie, ciao.
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] Estrarre dati tabella in diversi array PHP 2
trattorino [PHP] estrarre dati singoli PHP 1
S [PHP] Estrarre dati colonna in una stringa PHP 6
S [PHP] estrarre dati sito web protetto con username e password PHP 13
L [PHP] Estrarre dati da sito web Offerte e Richieste di Lavoro e/o Collaborazione 4
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
filippino Script PHP per estrarre dati estrazioni da sito "10 e lotto" PHP 0
M Php+MySql: Estrarre dati da tabella e consentire all'utente di modificare un valore 'in linea' PHP 6
R Estrarre dati da tabella mysql [era:Sto benedetto php] PHP 22
O [help] estrarre e visualizzare dati da mysql con php a oggetti PHP 6
I Estrarre dati da un file php PHP 3
P estrarre dati xml excel con php XML 1
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
R [PHP] Estrarre id utente loggato.? PHP 4
S [PHP] Estrarre elementi array su più variabili PHP 5
trattorino estrarre titolo video facebook in php PHP 0
N [PHP] Estrarre singolo valore da array PHP 4
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
Jensen [PHP] Estrarre prossimi 4 lunedì PHP 4
G [PHP] estrarre data da timeline yyyy-dd-gg hh:mm:ss PHP 4
Merlina3377 [PHP] estrarre solo un determinato id da tanti con REGEXP O LIKE PHP 1
trattorino Estrarre Nome Utente jquery div php PHP 9
S [PHP] estrarre le email da un elenco di url PHP 21
T4MAR4 [PHP] estrarre tag da un testo PHP 3
T [PHP] Estrarre stringa PHP 3
G [PHP] ESTRARRE DA DB VALORE MASSIMO E MINIMO IN UN INTERVALLO IMPOSTABILE A PIACERE PHP 56
bubino8 [PHP] Estrarre dominio No Sottodomini PHP 10
sandropochi [PHP] Query per estrarre record con data successiva a quella odierna PHP 2
giancadeejay [PHP] Estrarre solo record dell'utente connesso PHP 4
U [PHP] estrarre i risultati di una query e visualizzarli in una tabella. PHP 9
S [PHP] estrarre numero da stringa PHP 5
giuseppe_123 [PHP] Estrarre giorno mese e anno da una data PHP 2
asevenx [PHP] Estrarre valori evitando dublicati dal database PHP 2
M Estrarre dato da php e mysql PHP 5
A Estrarre da un Datetime di mysql la data e l'orario in PHP PHP 2
D [PHP/SQL] Estrarre risultati da 2 database Database 0
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6

Discussioni simili