Импорт CSV для обновления только одного столбца в таблице
У меня есть таблица, которая выглядит так:
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 и выполняя обновление для каждой отдельной строки, но это кажется неэффективным.
Ответы
Ответ 1
Вы можете использовать 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;
Ответ 2
Я бы загрузил данные обновления в отдельную таблицу UPDATE_TABLE
и выполнил обновление в MySQL, используя:
UPDATE PRODUCTS P SET P.QUANTITY=(
SELECT UPDATE_QUANTITY
FROM UPDATE_TABLE
WHERE UPDATE_PRODUCT=P.PRODUCT
)
У меня сейчас нет MySQL под рукой, поэтому я могу отлично проверить синтаксис, возможно, вам нужно добавить LIMIT 0,1
во внутреннюю SELECT
.