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

samurai.sette

Utente Attivo
17 Dic 2015
235
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
616
58
28
20
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.343
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
235
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.343
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
235
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
235
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
616
58
28
20
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
235
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.
 

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao a tutti.
Riapro dopo tanto tempo questa discussione perché mi trovo in una situazione molto simile ma non riesco a risolvere.
In passato dovevo estrarre i dati di una singola colonna (di cui conoscevo il nome) ed ottenere la media dei valori ad intervalli di tempo. Ora devo estrarre i dati di tutte le colonne (di cui NON conosco il nome) ed effettuare le medie ad intervalli di tempo per ciascuna colonna; Quindi devo ottenere la media dei dati della colonna0, la media dei dati della colonna1, ecc.
Finora per una singola colonna ho fatto in questo modo:
PHP:
$query= mysqli_query($con, 'SELECT DATE_FORMAT(data, "%d-%m-%Y") AS data, FLOOR(DATE_FORMAT(ora, "%H")/2) AS orario, ROUND (AVG(colonna0),7) AS med
FROM tabella GROUP BY DATE_FORMAT(data, "%d-%m-%Y"), FLOOR(DATE_FORMAT(ora, "%H")/2) ORDER BY id');
Come dovrei fare per tutte le colonne?
Grazie mille a tutti, 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
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3

Discussioni simili