Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il modo migliore per confrontare/inserire/aggiornare prodotti in un db MySQL da un file .CSV

Abbiamo avuto una situazione simile. Dopo molti tentativi per migliorare la sceneggiatura, abbiamo deciso che ci serviva un altro approccio per far funzionare la nostra importazione e non richiedere circa 10 ore.

Quello che abbiamo fatto è stato scaricare tutto il codice PHP e utilizzare invece mysqlimport per caricare il contenuto del file CSV direttamente in una tabella. Quella tabella ora contiene tutto ciò di cui abbiamo bisogno, ma non in una forma che ci sia utile (nessuna struttura, alcuni campi richiedono un'elaborazione, ecc.)

Tuttavia, poiché ora è tutto nel database, possiamo fare tutto ciò che vogliamo con una query. Ad esempio, eliminando tutti i dati che non sono più nel file di importazione, è solo DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , l'aggiornamento dei record esistenti è solo UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Ovviamente, per uno script di importazione complesso, le tue query saranno più complesse e ne avrai bisogno di più. Potrebbe anche essere necessario inserire alcune procedure memorizzate per eseguire l'elaborazione su singoli campi. Ma se puoi adottare questo tipo di approccio, ti ritroverai con un processo in grado di gestire molti dati ed è molto scalabile.