Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a melhor maneira de comparar / inserir / atualizar produtos em um banco de dados MySQL a partir de um arquivo .CSV


Tivemos uma situação parecida. Depois de muitas tentativas de melhorar o script, decidimos que precisávamos de outra abordagem para fazer nossa importação funcionar e não levar cerca de 10 horas.

O que fizemos foi despejar todo o código PHP e usar mysqlimport para carregar o conteúdo do arquivo CSV diretamente em uma tabela. Essa tabela agora contém tudo o que precisamos, mas não em uma forma que seja útil para nós (sem estrutura, alguns campos precisam de algum processamento etc.)

No entanto, como tudo está agora no banco de dados, podemos fazer tudo o que quisermos com uma consulta. Por exemplo, excluir todos os dados que não estão mais no arquivo de importação, isso é apenas DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , atualizar os registros existentes é apenas UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Obviamente, para um script de importação complexo, suas consultas serão mais complexas e você precisará de mais delas. Você pode até precisar lançar alguns procedimentos armazenados para fazer o processamento em campos individuais. Mas se você puder adotar esse tipo de abordagem, acabará com um processo que pode lidar com muitos dados e é muito escalável.