我有一个看起来像这样的表:
products
--------
id, product, sku, department, quantity
Run Code Online (Sandbox Code Playgroud)
此表中有大约800,000个条目.我收到了一个新的CSV文件,用于更新每个产品的所有数量,例如:
productA, 12
productB, 71
productC, 92
Run Code Online (Sandbox Code Playgroud)
因此,大约有750,000个更新(50,000个产品的数量没有变化).
我的问题是,如何导入CSV这个只更新基于关闭的数量product
(唯一的),但离开了sku
,department
独自一人,和其他领域?我知道如何通过循环CSV并为每一行执行更新来在PHP中执行此操作,但这似乎效率低下.
Ike*_*ker 116
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
我会将更新数据加载到单独的表中,UPDATE_TABLE
并使用以下命令在MySQL中执行更新:
UPDATE PRODUCTS P SET P.QUANTITY=(
SELECT UPDATE_QUANTITY
FROM UPDATE_TABLE
WHERE UPDATE_PRODUCT=P.PRODUCT
)
Run Code Online (Sandbox Code Playgroud)
我现在手头没有MySQL,所以我可以完美地检查语法,可能需要LIMIT 0,1
在内部添加一个SELECT
.