2016-11-22 3 views
0

Скажем, у меня есть таблица с 4 столбцами. Первые 2 столбца поступают из фида. Столбец value1 и value2 мне нужно обновить, используя результаты запросов API. Значения из запроса API должны идти в значению1 и value2MySQL UPDATE несколько строк с результатами API

+---------+------+-------+-------+ 
| prod_id | name | value1| value2| 
+---------+------+-------+-------+ 
| 1105 | aat |  |  | 
| 1108 | bbv |  |  | 
| 1111 | ccq |  |  | 
| 1116 | dde |  |  | 
| 1123 | iir |  |  | 
| 1125 | jjm |  |  | 
+---------+------+-------+-------+ 

Например запрос API дает мне эти значения:

1108, banana, apple 
1116, cucumber, pineapple 
1123, orange, melon 

Таким образом, в этом примере я хотел бы обновить эти 3 записи, но в моем случае я бы обновил около 1000-2000 записей за раз.

+---------+------+--------+----------+ 
| prod_id | name | value1 | value2 | 
+---------+------+--------+----------+ 
| 1105 | aat |  |   | 
| 1108 | bbv |banana |apple  | 
| 1111 | ccq |  |   | 
| 1116 | dde |cucumber|pineapple | 
| 1123 | iir |orange |melon  | 
| 1125 | jjm |  |   | 
+---------+------+--------+----------+ 

Как я могу обновить, скажем 2000 записей, используя только одну или несколько запросов? Нужно ли мне использовать временную таблицу или есть ли способ обойтись?

+0

Я думаю, что вы вынуждены использовать промежуточный язык, а не непосредственно с MySQL, как PHP, C#, Java, C++ и т.д. Query database-> Запрос на API-> Обновление базы данных –

ответ

0

Вы можете реализовать пакетное обновление с использованием CASE, как описано в How to bulk update mysql data with one query?.

Альтернативно, если вы управляете схемой базы данных, вы можете вставить результаты вызовов API в пакетные операторы INSERT, а затем JOIN, когда вам нужно найти конкретное значение.

Таблица A

+---------+------+ 
| prod_id | name | 
+---------+------+ 
| 1105 | aat | 
| 1108 | bbv | 
| 1111 | ccq | 
| 1116 | dde | 
| 1123 | iir | 
| 1125 | jjm | 
+---------+------+ 

Таблица B

+---------+----------+-----------+ 
| prod_id | value1 | value2 | 
+---------+----------+-----------+ 
| 1108 | banana | apple  | 
| 1116 | cucumber | pineapple | 
| 1123 | orange | melon  | 
+---------+----------+-----------+ 

Когда результаты извлекаются из API вызовов они могут быть вставлены в пакетном режиме.

INSERT INTO B (prod_id, value1, value2) VALUES 
(1108, 'banana', 'apple'), 
(1116, 'cucumber', 'pineapple'), 
(1123, 'orange', 'melon') 

Позже, если вам нужны все значения prod_id 1108, например, вы можете получить их йоту простого соединения таблиц A и B.

SELECT A.prod_id, A.name, B.value1, B.value2 
FROM A JOIN B ON A.prod_id = B.prod_id 
WHERE A.prod_id = 1108 
+0

код [ссылка] (http://stackoverflow.com/questions/11664684/how-to-bulk-update-mysql-data-with-one-query), который вы предоставили, было очень полезно. Для моих целей самым простым решением было «ON DUPLICATE KEY UPDATE», упомянутое пользователем Ярослава. – dean2020

Смежные вопросы