Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la meilleure façon de comparer / insérer / mettre à jour des produits dans une base de données MySQL à partir d'un fichier .CSV

Nous avons eu une situation similaire. Après de nombreuses tentatives pour améliorer le script, nous avons décidé que nous avions besoin d'une autre approche pour que notre importation fonctionne et ne prenne pas environ 10 heures.

Ce que nous avons fait a été de vider tout le code PHP et d'utiliser à la place mysqlimport pour charger le contenu du fichier CSV directement dans une table. Cette table contient maintenant tout ce dont nous avons besoin, mais pas sous une forme qui nous soit utile (pas de structure, certains champs nécessitent un traitement, etc.)

Cependant, comme tout est maintenant dans la base de données, nous pouvons faire tout ce que nous voulons avec une requête. ON st.someField =ut.someField WHERE ut.someField IS NULL; , la mise à jour des enregistrements existants est simplement UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField =ut.someField SET st.anotherField =CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Évidemment, pour un script d'importation complexe, vos requêtes seront plus complexes et vous en aurez besoin de plus. Vous devrez peut-être même lancer certaines procédures stockées pour effectuer le traitement sur des champs individuels. Mais si vous pouvez adopter ce type d'approche, vous vous retrouverez avec un processus qui peut gérer beaucoup de données et qui est très évolutif.