我有一张如下所示的表格:
products
--------
id, product, sku, department, quantity
此表中大约有 800,000 个条目。我收到了一个新的 CSV 文件,其中更新了每种产品的所有数量,例如:
productA, 12
productB, 71
productC, 92
因此大约有 750,000 次更新(50,000 种产品的数量没有变化)。
我的问题是,如何导入此 CSV 以仅更新基于 product
的数量(唯一)但保留 sku
、department
和其他字段单独?我知道如何在 PHP 中通过循环遍历 CSV 并为每一行执行更新来做到这一点,但这似乎效率低下。
最佳答案
您可以使用 LOAD DATA INFILE
将 800,000 行数据批量加载到临时表中,然后使用多表 UPDATE
将现有表连接到临时表并更新数量值的语法。
例如:
CREATE TEMPORARY TABLE your_temp_table LIKE your_table;
LOAD DATA INFILE '/tmp/your_file.csv'
INTO TABLE your_temp_table
FIELDS TERMINATED BY ','
(id, product, sku, department, quantity);
UPDATE your_table
INNER JOIN your_temp_table on your_temp_table.id = your_table.id
SET your_table.quantity = your_temp_table.quantity;
DROP TEMPORARY TABLE your_temp_table;
https://stackoverflow.com/questions/10253605/