Visualizzazione dei risultati da 1 a 7 su 7

Discussione: record in phpmyadmin

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    61

    record in phpmyadmin

    Un saluto a tutti,dunque il mio problema e' il seguente:
    Ho un pc con installato sistema operativo linux fedora core 8 con su installato php apache my sql e phpmyadmin questo sistema deve gestire dei sensori di temperatura il tutto funziona perfettamente ,l'unico inconveniente e' che quando la tabella in phpmyadmin chiamata archivio comincia a essere piena di record il sistema si appesantisce fino a non aggiornare le letture e quindi devo intervenire nel phpmyadmin selezionare la tabella archivio cliccare su esporta e dopo aver salvato i dati posso cancellarli in modo che il tutto riparte.Purtroppo questo avviene almeno 2 volte a settimana e quindi volevo sapere se si puo' effettuare il tutto in automatico e come,anche con un programmino da installare se ci fosse o con qualche altra diavoleria.
    Grazie per l'attenzione

  2. #2
    Ciao,
    credo che la soluzione al problema possa essere un semplice script php che ti faccia un DUMP delle tabelle sovrapopolate e poi cancelli i record più vecchi di una certa data. Ovviamente devi avere un campo di tipo date datetime o timestamp nlle tabelle. Allora che ne so supponi di voler cancellare ogni giorno i record appartenenti a tre giorni prima:

    Codice PHP:
    // presuppongo che la connessione al DB sia attiva
    $table 'tabella_interessata';
    // se oggi è il 2009-04-29 otteniamo 2009-04-26
    $last_3day  date('Y-m-d'time()-3*24*60*60);

    $query "SELECT * FROM ".$table." WHERE date<'$last_3day' ORDER BY date";
    $queryDB mysql_query($query);
    if(!
    $queryDB) {
        
    // errore nella query o nella connessione a DB
           
    exit();
    } else {
        
    // initializzo l'array dei risultati
        
    $dbresults = array();
                
        
    $numberrows(mysql_num_rows($queryDB));
        if(
    $numberrows 0){
            while(
    $rows=mysql_fetch_assoc($queryDB))
            {
                
    $dbresults[]=$rows;
            }
        }
    }

    // quindi $dbresults contiene le righe della tabella. Inizializzo la variabile $testo
    $testo '';
    foreach(
    $dbresults as $row) {
            
    // qui nonn so come si chiamano i campi...
            
    $campo1 $row['campo1'];
            
    $campo2 $row['campo2'];
            
    // etc.....
            
    $testo .= "\"$campo1\",\"$campo2\"/n";   // se hai piu' campi li metti tutti
            
    }

    // ok adesso bisogna salvara la variabile testo in un file csv ad esempio (si apre nei fogli di calcolo)
    $file "path_to_file/nome_file.csv";
    $fw fopen($file'w');
    fwrite($fw$testo);
    fclose($fw);

    // ed ora si possono eliminare i dati da DB (controlla prima però che la scrittura dei file vada a buon fine, possono esserci problemi di permessi etc...)

    $query_del "DELETE FROM ".$table." WHERE date<'$last_3day'";
    $result mysql_query($query_del); 

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    61
    Ciao Abidibo grazie per l'attenzione che mi hai dedicato dunque leggendo la tua risposta per prima cosa mi chiedi che devo avere un campo tipo date o time o roba del genere allora il database e' composto cosi:
    11 tabelle

    archivio
    attenzione
    clienti
    interfaccia
    letture
    scheda identificativo
    sensori
    tecnici
    unità centrale
    valori
    valori medie
    se seleziono la tabella archivio e clicco su struttura esce fuori questo

    id
    idi
    ids
    temp
    umid
    dewp
    tmin
    tmax
    tmar
    rete
    inga
    ingb
    ingc
    stre
    data
    invu
    invc

    forse il campo data e' quello che ti riferivi?puo' andare bene?
    Volevo allegarti delle immagini del database ma piu' di 25k non si puo'.
    Ciao e grazie

  4. #4
    Ciao
    si, presumibilmente il campo data è proprio quello che indica il tempo di inserimento del record, ma per esserne sicuro dovresti
    1 - guardare che tipo di campo è cioè date/datetime/timestamp, questo lo vedi dalla struttura della tabella, ci sono campi int/float/enum/text/date/.... e molti altri
    2- assicurarti che quando viene scritto un record effettivamente quel campo venga riempito con la data di aggiornamento
    Poi chiaramente il campo data all'interno della tabella archivio ti permette in generale di fare questo giochetto solo sulla tabella archivio, per sapere se puoi usare quella data per cancellare anche record in altre tabelle bisognerebbe vedere il codice e capire se ci sono altri inserimenti legati a quella data.
    Spero di essermi fatto capire.... ciao!
    =======================
    http://www.abidibo.net

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    61
    Ciao abidibo allora il record quando viene scritto e' con la data di aggiornamento,a questo punto vorrrei usare il tuo script ma ti vorrei chiedere alcune cose :

    1 l'ho copiato in un notepad e salvato come "backup.php"
    2lo script salvato come backup.txt l'ho inserito nella cartella html dove risiede il database e il tutto per il sistema di monitoraggio sensori
    3 cosi ho provato a fare lo script che mi avevi scritto ma sicuramente ho fatto qualche stupidata.


    // presuppongo che la connessione al DB sia attiva
    $table = 'archivio';
    // se oggi è il 2009-04-29 otteniamo 2009-04-26
    $last_3day = date('Y-m-d', time()-3*24*60*60);

    $query = "SELECT * FROM ".$table." WHERE date<'$last_3day' ORDER BY date";
    $queryDB = mysql_query($query);
    if(!$queryDB) {
    // errore nella query o nella connessione a DB
    exit();
    } else {
    // initializzo l'array dei risultati
    $dbresults = array();

    $numberrows(mysql_num_rows($queryDB));
    if($numberrows > 0){
    while($rows=mysql_fetch_assoc($queryDB))
    {
    $dbresults[]=$rows;
    }
    }
    }

    // quindi $dbresults contiene le righe della tabella. Inizializzo la variabile $testo
    $testo = '';
    foreach($dbresults as $row) {
    // qui nonn so come si chiamano i campi...
    $campo1 = $row['id'];
    $campo2 = $row['idi'];
    $campo2 = $row['ids'];
    $campo2 = $row['temp'];
    $campo2 = $row['umid'];
    $campo2 = $row['dewp'];
    $campo2 = $row['tmin'];
    $campo2 = $row['tmax'];
    $campo2 = $row['tmar'];
    $campo2 = $row['umin'];
    $campo1 = $row['umax'];
    $campo2 = $row['umar'];
    $campo2 = $row['dwps'];
    $campo2 = $row['dwpm'];
    $campo2 = $row['rete'];
    $campo2 = $row['inga'];
    $campo2 = $row['ingb'];
    $campo2 = $row['ingc'];
    $campo2 = $row['stre'];
    $campo2 = $row['data'];
    $campo1 = $row['invu'];
    $campo2 = $row['invc'];
    // etc.....
    $testo .= "\"$id\",\"$idi\",\"$ids\",\"$temp\",\"$umid\",\"$ dewp\",\"$tmin\",\"$tmax\",\"$tmar\",\"$umin\",\"$ umax\",\"$umar\",\"$dwps\",\"$dwpm\",\"$rete\",\"$ inga\",\"$ingb\",\"$ingc\",\"$stre\",\"$data\",\"$ invu\",\"$invc\"/n"; // se hai piu' campi li metti tutti

    }

    // ok adesso bisogna salvara la variabile testo in un file csv ad esempio (si apre nei fogli di calcolo)
    $file = "var/www/html/letture.csv";
    $fw = fopen($file, 'w');
    fwrite($fw, $testo);
    fclose($fw);

    // ed ora si possono eliminare i dati da DB (controlla prima però che la scrittura dei file vada a buon fine, possono esserci problemi di permessi etc...)

    $query_del = "DELETE FROM ".$table." WHERE date<'$last_3day'";
    $result = mysql_query($query_del);
    ciao a presto

  6. #6
    2lo script salvato come backup.txt l'ho inserito nella cartella html dove risiede il database e il tutto per il sistema di monitoraggio sensori
    Qual è la necessità di salvare lo script come file di testo?

    Lo script che ti avevo scritto era una bozza, poi va 'interfacciato' con il tuo applicativo, non so, ad esempio bisognerebbe far si che venga eseguito una sola volta al giorno etc...

    Comunque
    - La connessione al DB deve essere attiva, quindi devi avere qualche funzione che la esegua.
    // quindi $dbresults contiene le righe della tabella. Inizializzo la variabile $testo
    $testo = '';
    foreach($dbresults as $row) {
    // qui nonn so come si chiamano i campi...
    $campo1 = $row['id'];
    $campo2 = $row['idi'];
    $campo2 = $row['ids'];
    $campo2 = $row['temp'];
    $campo2 = $row['umid'];
    $campo2 = $row['dewp'];
    $campo2 = $row['tmin'];
    $campo2 = $row['tmax'];
    $campo2 = $row['tmar'];
    $campo2 = $row['umin'];
    $campo1 = $row['umax'];
    $campo2 = $row['umar'];
    $campo2 = $row['dwps'];
    $campo2 = $row['dwpm'];
    $campo2 = $row['rete'];
    $campo2 = $row['inga'];
    $campo2 = $row['ingb'];
    $campo2 = $row['ingc'];
    $campo2 = $row['stre'];
    $campo2 = $row['data'];
    $campo1 = $row['invu'];
    $campo2 = $row['invc'];
    // etc.....
    $testo .= "\"$id\",\"$idi\",\"$ids\",\"$temp\",\"$umid\",\"$ dewp\",\"$tmin\",\"$tmax\",\"$tmar\",\"$umin\",\"$ umax\",\"$umar\",\"$dwps\",\"$dwpm\",\"$rete\",\"$ inga\",\"$ingb\",\"$ingc\",\"$stre\",\"$data\",\"$ invu\",\"$invc\"/n"; // se hai piu' campi li metti tutti
    Non va bene, continui a sovrascrivere le variabili $campo1 e $campo2, mentre $id, $idi etc.. sono vuote perchè non le hai definite. Dovresti fare tipo
    Codice PHP:
    $id $row['id'];
    $idi $row['idi'];
    $ids $row['ids'];
    $temp $row['temp'];
    // etc... 
    Allora si.
    Però ti ripeto, non era mio scopo fornirti uno script da prendere copiare e mettere in un file et oila, perfettamente funzionante. Bisognerebbe conoscere la tua applicazione, diciamo che era una bozza se vuoi già quasi definitiva, ma una bozza da seguire ed adattare alla tua situazione.
    Ciao
    =======================
    http://www.abidibo.net

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    61
    Ora ho capito cerco di provarci anche se credo che non ne saro' all'altezza comunque grazie per la tua pazienza e ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.