Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    aggiornamento automatico tabella da link e storico dati

    Salve,
    vorrei sapere se è possibile aggiornare automaticamente una tabella di un database, da un link che riporta al file .sql. più che aggiornarla, dovrebbe sostituirla.
    Faccio un esempio:

    al link
    codice:
    www.aggiornamento.it/tabella.sql
    tabella.sql è del tipo:

    codice:
    INSERT INTO `tabella` VALUES (X,X,X,X,X,X,X,X,X,X,X);
    INSERT INTO `tabella` VALUES (Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y);
    eccetera
    vorrei sapere se è possibile fare uno script che va ad aggiornare o sostituire quella precedente in modo automatico, ad esempio ogni mattina lancio lo script e da solo va a quell'indirizzo e la sostituisce a quella presente nel mio database.

    inoltre dovrei tenere uno "storico" dei dati precedenti.
    faccio un altro esempio:
    ho le tabelle:
    tabella (originale) <---quella che dovrebbe essere sostituita ogni giorno
    tabella1 <---dati giorno precedente a tabella
    tabella2 <---dati giorno precedente a tabella1
    tabella3 <---dati giorno precedente a tabella2
    tabella4 <---dati giorno precedente a tabella3
    ....
    tabella7

    le tabelle da 1 a 7 non hanno gli stessi campi di quella originale, per come le ho organizzate dovranno tenere solo 2 valori di quella originale.
    ecco vorrei fare uno script che appena lanciato, va a scaricarsi il file, aggiorna la tabella originale, e aggiorna quelle precedenti, ricopiando da tabella6 a tabella7, da tabella5 a tabella6.......da tabella (originale) a tabella1 (solo i campi che mi interessano).
    la soluzione a cui avevo pensato è quella di:
    eliminare la tabella 7 (tanto i dati troppo vecchi non mi interessano più)
    creare la tabella 7 uguale alla 6, e ricopiarne i valori
    eliminare la tabella 6 (che è stata ricopiata sulla 7)
    creare tabella6 uguale alla 5 e ricopiarne i valori
    eccetera

    però questa soluzione la vedo come un caso estremo, non c'è qualcosa di più "pulito"?
    tenere questo storico mi serve per fare delle statistiche rispetto ai giorni precedenti.

    un'ultima cosa, per tenere uno storico dei dati (diciamo degli ultimi 7 giorni) mi consigliate di fare in questo modo (cioè fare tabelle separate), o farne una unica con un campo di "anzianità"? premetto che ogni tabella ha da 8000 a 10000 record.

    ringrazio in anticipo per la disponibilità

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    credo che creare 7 tabelle sia fuori dallo spirito proprio dell'uso di database (oltretutto medio-piccole, perche 10k record non sono di certo numeri impressionanti), ma qualcuno potrebbe pensarla in maniera diversa.

    Per quanto riguarda il rendere pressoché automatico il processo, potresti trovare qualche ispirazione nel codice dei software più conosciuti, come wordpress, phpbb, phpmyadmin etc... per esempio in questa discussione:

    Loading .sql file via PHP

    riportano (4° o 5° intervento) le funzioni utilizzate da phpbb.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Ottimo grazie adesso gli do' un'occhiata!

    Riguardo le 7 tabelle quindi dici che non conviene?

    Se ne faccio una sola come dovrei strutturarla?
    tipo:

    id id_cont contenuto eta
    0 1525 10 1
    1 1525 15 2
    2 456 7 1
    3 1525 15 3


    eliminare i record con una determinata eta (es 3) non è un problema, ma poi dovrei modificare l'eta di quelle precedenti ed aggiornarla (quindi nell'esempio tutte quelle con eta 2 dovrebbero diventare di eta 3)
    oppure più semplicemente le lascio incrementare all'infinito....ma come faccio a sapere qual'è l'ultima da cancellare?
    considera che i dati nello storico possono anche non contenere aggiornamenti di quella aggiornata. nel senso che se nell'originale c'è un nuovo record, quando questa tabella della storico viene aggiornata, l'eta di quel nuovo record sarà 1? o sarà l'ultima eta (nell'esempio 3)?

    pensavo di creare le 7 tabelle anche perchè nella tabella originale (scaricata) potrebbero non esserci record presenti invece in quella dello storico (ad esempio se nell'originale quella con id_cont 456 viene cancellata, nello storico resterà). proprio per questo le 7 tabelle che si distruggono una ad una, così i record non presenti in quella originale spariranno automaticamente al massimo in 7 giorni.

    non sono un esperto di php e mysql, quindi magari ci sono tecniche che fanno quello che voglio fare io in modo molto più semplice....

    qualche consiglio?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Ciao,

    cosa intendi per "in automatico" ? Che ogni mattina a tot ora ti parte da solo lo script e fa quello che desideri?

    In questo caso mi sa che ti devi dotare di qualche script che operi nel server.

    Se invece "l'automatico" vuoi effettuarlo quando accade qualche evento sulla tua pagina (se è una pagina) potresti optare per un mix di AJAX->Php->Sql->MySql..

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    usi un campo data e verifichi se un certo record è più vecchio di "adesso" - un certo offset di giorni/ore/settimane... quel che vuoi. E' tutto spiegato nel manuale di mysql nella sezione che parla delle funzioni relative DATE, TIMESTAMP etc etc
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    In automatico nel senso che non devo scaricare manualmente quel file, andare su phpmyadmin, rimuovere tutti i record dalla tabella che mi interessa, e importare il file .sql

    Lancerò io lo script ogni mattina (almeno per ora, per automatizzare la cosa ad uno orario prestabilito ci lavorerò in seguito, intanto volevo sapere se è possibile farlo).
    Vorrei che lo script appena lanciato, scaricasse il file da un link prestabilito, cancellasse i record in una tabella e inserisse i dati del file .sql scaricato

    In pratica anzichè mettermi davanti al pc per 15 minuti, e fare tutte queste cose, lancio lo script e vado a fare colazione

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Ah ok, perfetto ora è tutto chiaro.

    A questo punto hai bisogno di un "LOAD DATA" . La lanci nel modo che più ti garba e quella fa tutto da sè.

    [ http://dev.mysql.com/doc/refman/5.1/en/load-data.html ]

    Ora non so sinceramente se vale anche per i file .sql , mi sà che forse per questi c'è un'altro metodo ancora...quando ho effettuato questo tipo di operazioni tramite il mio phpmyadmin non ho mi sono preoccupato di guardare il codice relativo

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da wartpro

    A questo punto hai bisogno di un "LOAD DATA" . La lanci nel modo che più ti garba e quella fa tutto da sè.
    Quoto: se sei in ambito "locale" oppure il tuo hosting lo consente, sfruttare LOAD DATA è la soluzione più semplice ed efficace. Se invece le operazioni le svolgi su server remoto con restrizioni all'accesso e all'esecuzione di determinati comandi (per esempio, no shell) ovvero sul classico dominio in hosting su server shared (tipico esempio in cui potresti essere super-limitato), allora LOAD DATA potrebbe non essere una strada percorribile
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Vero. Le restrizioni. Scusa mi era sfuggito. Grazie Andrea.

  10. #10
    Loading .sql file via PHP
    da qui credo di aver capito (l'ho letto molto velocemente...) che legge il file riga per riga e per ogni riga crea una query di inserimento....

    in effetti il file è del tipo:
    codice:
    INSERT INTO `tabella` VALUES (X,X,X,X,X,X,X,X,X,X,X);
    INSERT INTO `tabella` VALUES (Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y);
    eccetera
    ho riguardato il file .sql, ha circa 25.000 righe....non è un po' troppo "pesante" seguire questo procedimento?
    Considerando che eliminerei i contenuti della tabella prima di scriverci i nuovi record, non rischio di avere un gap troppo lungo e quindi rendere inutilizzabili tutte le altre query che si riferiscono a quella tabella (praticamente tutte)?

    credo sia più veloce un
    Codice PHP:
    create table tab_new like tabella
    insert into tab_new 
    (select from tab_originale
    prima di elimanare la tabella, e impostare tutte le query su questa tab_new, in modo che quando aggiorno dal file .sql sulla tabella originale, si possa ancora lavorare tranquillamente su tab_new, e dopo che sono state eseguite tutte le query di inserimento (per l'aggiornamento dal file scaricato), eliminare tab_new, e ricrearla allo stesso modo indicato prima. almeno credo sia più veloce questo procedimento, in modo da rendere inutilizzabile il sito per meno tempo. (magari sto dicendo delle bestialità.....)

    l'altro problema è come scaricare il file in automatico....si può fare un wget o qualcosa di simile in php?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.