Irf*_*fan 20 mysql csv import phpmyadmin
大约有26K产品(帖子),每个产品都有这样的元数值:
post_id列是db中的产品ID,_sku(meta_key)是每个产品的唯一ID.
我收到了一个新的CSV文件,用于更新每个产品的_sale_price(meta_key)的所有值(meta_value).CSV文件如下所示:
SKU,销售价格
如何导入此CSV以仅根据post_id(产品ID)和_sku值更新_sale_price行?
输出示例:
我知道如何通过循环CSV并为每个产品选择并执行更新来在PHP中执行此操作,但这似乎效率低下.
最好使用phpMyAdmin并使用LOAD DATA INFILE.
rAn*_*m69 34
您可以使用临时表来保存更新数据,然后运行单个更新语句.
CREATE TEMPORARY TABLE temp_update_table (meta_key, meta_value)
LOAD DATA INFILE 'your_csv_pathname'
INTO TABLE temp_update_table FIELDS TERMINATED BY ';' (meta_key, meta_value);
UPDATE "table"
INNER JOIN temp_update_table on temp_update_table.meta_key = "table".meta_key
SET "table".meta_value = temp_update_table.meta_value;
DROP TEMPORARY TABLE temp_update_table;
Run Code Online (Sandbox Code Playgroud)
如果 product_id 是该表的唯一列,则可以使用 CSV 执行此操作:
有一个 CSV 文件,其中包含要导入的文件及其唯一 ID。CSV 文件必须与表格列的顺序相同,放置所有列,不要列名
然后在phpMyAdmin中,进入数据库表,点击导入
在格式字段的下拉列表中选择 CSV
确保选中“在导入时发现重复键时更新数据(添加 DUPLICATE KEY UPDATE)”。
您可以将新数据导入到另一个表(表2)中。然后使用带有子选择的更新来更新主表(table1):
UPDATE table1 t1 set
sale_price = (select meta_value from table2 t2 where t2.post_id = t1.product_id)
WHERE
(select count(*) from table2 t2 where t1.product_id = t2.post_id) > 0
Run Code Online (Sandbox Code Playgroud)
这显然是一种简化,您很可能需要进一步限制您的查询。
请确保在尝试之前备份完整数据库。我建议您使用非生产数据库,直到该过程完美运行。
归档时间: |
|
查看次数: |
43606 次 |
最近记录: |