Domanda

Ho letto le soluzioni a problemi simili, ma sembrano coinvolgere tutti script e strumenti extra. Spero che il mio problema sia abbastanza semplice da evitarlo.

Quindi l'utente carica un csv dei dati della prossima settimana. Viene inserito nel DB, nessun problema.

MA

un'ora dopo riceve feedback da tutti e deve effettuare gli aggiornamenti di conseguenza. Aggiorna il CSV e va a caricarlo sul DB.

In questo momento, il sistema che sto usando controlla per vedere se i dati per quella settimana sono già lì, e se lo è, estrae tutti quei dati dal DB, uno script trova le differenze e le invia, e dopo tutto ciò, i dati dei vecchi dati vengono eliminati e sostituiti con i nuovi dati.

Ovviamente, è molto più semplice cancellarlo e reinserire i dati, ma non è il metodo migliore, specialmente se ci sono molte modifiche o tonnellate di dati. Ma devo sapere quali modifiche sono state apportate per inviare avvisi. Ma non voglio un registro delle transazioni, poiché gli avvisi devono essere inviati solo una volta e, successivamente, i vecchi dati sono inutili.

!

Esiste un modo intelligente per confrontare i nuovi dati con quelli già esistenti, ottenere solo le righe che vengono modificate / eliminate / aggiunte e apportare tali modifiche? In questo momento sembra che potrei fare un aggiornamento, ma poi non riceverò alcuna risposta su ciò che è cambiato ...

Grazie!

Modifica rapida:

Nessuna chiave esterna è attualmente in uso. Questo cambierà presto, ma non dovrebbe fare la differenza, perché le chiavi esterne indicheranno solo a chi effetti i dati e quindi non dovranno essere modificati. Per quanto riguarda le chiavi primarie, ciò presenta un po 'di un dilemma:

I dati in questione sono il programma di lavoro di tutti. Quindi sarebbe bello (per applicazioni specifiche di questo programma al di là del semplice output) che ogni turno avesse una chiave. Ma il problema è, diciamo, che user1 era in ritardo lunedì. Il ritardo è registrato in una tabella separata ed è legato allo spostamento usando il tasto shift. Ma se martedì è necessario apportare alcune modifiche alla settimana già in corso, il mio timore è che diventerà troppo difficile assicurare che tutte le voci nel DB siano già avvenute (e quindi potrebbero avere associazioni che non dovrebbero essere rotto) verrà re-digitato nel processo. Sfortunatamente, non è semplice come aggiornare solo tutti gli eventi che si verificano DOPO l'ora corrente, in quanto ciò aggiungerebbe lavoro (e quindi lo renderebbe meno commerciabile) alle persone che eseguono il caricamento. Fondamentalmente, eseguono la pianificazione su un programma, lo esportano in un CSV e quindi lo caricano su una pagina Web per tutte le webapp che necessitano di tali dati. Quindi è semplicemente molto più facile per loro (e meno stressante per tutti i soggetti coinvolti) fare la stessa routine ogni volta che esporti l'intera settimana e caricarla.

Quindi la mia più grande preoccupazione è rendere lo script di upload il più intelligente possibile su entrambi i lati. Non si gonfia nel tentativo di trovare le modifiche, può trovare le modifiche indipendentemente dall'input E nessuno dei dati invariati rischia di essere riscritto.

Ecco una domanda correlata:

Suppose Joe User was schedule to wash dishes from 7:00 PM to 8:00 PM, but the new
data has him working 6:45 PM to 8:30 PM.  Has the shift been changed? Or has the old
one been deleted and a new one added?

E un altro:

Say Jane was schedule to work 1:00 PM to 3:00 PM, but now everyone has a mandatory
staff meeting at 2:00 to 3:00. Has she lost one shift and gained two? Or has one
shift changed and she gained one?

Sono davvero interessato a sapere come questo tipo di dati viene generalmente gestito / affrontato, più che risposte specifiche a quanto sopra.

Ancora una volta, grazie.

È stato utile?

Soluzione

  

In questo momento, il sistema che sto usando controlla per vedere se i dati per quella settimana sono già lì, e se lo è, estrae tutti quei dati dal DB, uno script trova le differenze e le invia, e dopo tutto ciò, i dati dei vecchi dati vengono eliminati e sostituiti con i nuovi dati.

Quindi la tua sceneggiatura conosce le differenze, giusto? E non vuoi usare altri strumenti extra, a parte il tuo script e MySQL, giusto?

Sono abbastanza convinto che MySQL non offra alcuno strumento 'diff' da solo, quindi il meglio che puoi ottenere è creare un nuovo file CSV solo per gli aggiornamenti. Voglio dire - dovrebbe contenere solo righe modificate. L'aggiornamento sarebbe più rapido e tutti i dati modificati sarebbero facilmente disponibili.

Altri suggerimenti

Se si dispone di una chiave univoca su uno dei campi, è possibile utilizzare:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top