[PHP] Struttura Database di statistica

Rey

Utente Attivo
11 Set 2012
73
0
6
Salve a tutti,
ho scritto un programma in un router che ogni giorno genera un file txt con l'hostname, le ultime cifre l'ip. i mb scaricati, uplodati e totali, una cosa così:

HTML:
iPad-di-Mario,254,100,100,200
android-432133,253,50,50,10
etc...
Poi con google chart genero il grafico

PHP:
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['IP', 'DL', 'UP', 'TOT'],
          <?php
          $file = file("stats--20170315.txt");
          foreach ($file as $line) { list($ip,$dl,$up,$tot, ) = explode(",",trim($line));
          echo "['$ip | $tot MB', $dl, $up, $tot],\n";
        }
        ?>
        ]);

Invece che visualizzarli così al volo vorrei importarli in un db mysql per generare statistiche settimanali/mensili oltre che giornaliere ma non so bene come strutturare il db, gli ip sono da 100 a 254 quindi in totale 154 colonne? Avevo in mente di creare una tabella con 365 righe (una per giorno) e 154 colonne (una per ip), probabilmente si può fare meglio.. Sapete darmi qualche dritta? Grazie..

Qui un po' di codice:

PHP:
// Se il database è vuoto
$tabella = $prefixdb . 'anno' . $anno;
$sql = "SELECT data FROM $tabella WHERE id_anno = ?";
$data = $db->Query_select($sql, array(1)); 
if (!count($data)) {

// Se l'anno è bisestile
if ($bisestile == 1) {

// Inserisco le date
for ($giorni = 1; $giorni <= 31; $giorni++) {
for ($mesi = 1; $mesi <= 12; $mesi++) {

if ($mesi == 2 && $giorni == 30 ||
$mesi == 2 && $giorni == 31 ||
$mesi == 4 && $giorni == 31 ||
$mesi == 6 && $giorni == 31 ||
$mesi == 9 && $giorni == 31 ||
$mesi == 11 && $giorni == 31) { continue; }

$aammgg = $anno . '-' . $mesi . '-' . $giorni;
$sql = "INSERT INTO $tabella (data,mese) VALUES(?,?)";
$data = $db->Query_InsUpd($sql, array($aammgg,$mesi));
}
}
etc...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che ho capito tu vuoi crere delle statisti di visita al tuo sito, giusto?
prima di mettere giu il codice è importante definire la struttura del db (carta e matita) definendo quali dati servono e a cosa poi devono servire.
ti faccio un esempio:
se vuoi sapere quante visite ha fatto un determinato ip al tuo sito semplicemente così senza sapere le date ti basta uan tabella del tipo
IP (chiave primaria)
num_visite
e con la INSERT ... ON DUPLICATE KEY UPDATE risolvi subito
se al contrerio vuoi fare delle statistiche più complesse allora la tabella diventa più complessa (e di conseguenza le query)
es se vuoi dividere per data la tabella potrebbe essere
id (chiave primaria)
IP
data_visita
ricorda comunque che mentre lo script è semplice da aggiornare, aggiornare le tabelle (es aggiungere un campo) e un po più rognoso soprattutto se la tabella è gia molto usata
 

Rey

Utente Attivo
11 Set 2012
73
0
6
Ciao borgo,
forse la mia spiegazione sul cos'è è stata un po' troppo sintetica, provo a spiegarmi meglio, non ha niente a che fare con le visite a un sito, immagina di connettere il tuo cellulare o PC in wifi in un hotel e navigare su youtube, facebook etc.. al tuo cellulare verrà assegnato un ip casuale che va da 100 a 254 ed avrà validità 24h. Una volta al giorno il mio programma scrive in un txt i dati sul traffico generato da ogni dispositivo (c'è l'esempio nel mio post precedente) e resetta i contatori, stop. Ora pescando i dati dal txt vedo statistiche giornaliere, vorrei averle anche settimanali/mensili.
 

Rey

Utente Attivo
11 Set 2012
73
0
6
Nessuno sa darmi qualche dritta? Penso farò tutto in un'unica tabella, Una riga per giorno e una colonna per utente.. 154 colonne in una tabella sono troppe?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sempre che non abbia capito male io farei una tabella del tipo chiamata es statistiche
Codice:
id
data
ip
tot_mb
dl
up
tot
poi leggi il tuo file txt
PHP:
//dati connessione
$file = file("stats--20170315.txt");
foreach ($file as $line) { list($ip,$dl,$up,$tot, ) = explode(",",trim($line));
           echo "['$ip | $tot MB', $dl, $up, $tot],\n";
           $data_lettura_txt=date("y/m/d");//data in cui leggi il file
           $query="INSERT INTO statistiche(data,ip,tot_mb,dl,up,tot) VALUE('$data_lettura_tx','$ip','$tot','$dl','$up','tot')";
           //al posto di $data_lettura_tx puoi metter now() o usare il timestamp $data_lettura_txt=time(); vedi tu
           $ris=mysqli_query($conn, $query);
}
//....
da una tabella fatta così puoi ricavare tutte le statistiche che ti servono (giornaliere, mensili, annuali, quanto scaricato....) interrogandola in varie maniere

spero di non aver capito male
 
Discussioni simili
Autore Titolo Forum Risposte Data
KILLERIX [PHP] Notifiche utente, connessione database, struttura generale dati PHP 3
F Ricreare struttura php+mysql su Xampp Apache 0
N Struttura ad Albero di Directory _ PHP PHP 2
W PHP Webservices SOAP, struttura file wsdl XML 4
M [PHP] struttura ad albero PHP 1
M [PHP] Struttura iterativa PHP 2
M [PHP] Algoritmo con struttura iterativa PHP 2
M [PHP] Problema con algoritmo struttura iterativa PHP 2
S non riesco a capire la struttura di questo sito in PHP PHP 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
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0

Discussioni simili