mysql update или вставить несколько записей, если они еще не существуют в таблице

в базе данных mysql есть таблица с именем «inventory_item». «id», «product_id» и «количество» являются столбцами таблицы. «id» является основным ключом и автоматически генерируется при вставке записи.

когда пользователь отправляет форму, которая должна вставить несколько записей в таблицу, все данные product_ids и их количества могут быть собраны в цикле foreach.

поэтому мне нужно вставить несколько записей одновременно и нужно только обновлять количество, если «product_id» уже существует в таблице без вставки в качестве новой записи.

вот мой кодовый блок ..

foreach ($dataArray as $value) { $pcid = $value["pcid"]; $quantity = $value["quantity"]; $sql = " UPDATE table.inventory_item SET quantity='$quantity' WHERE product_category_id='$pcid' IF ROW_COUNT()=0 INSERT INTO table.inventory_item (product_category_id, quantity) VALUES ('$pcid', '$quantity') "; $result = $conn->query($sql); var_dump($result); } 

Solutions Collecting From Web of "mysql update или вставить несколько записей, если они еще не существуют в таблице"

INSERT INTO ….. ON DUPLICATE KEY …. ist ваш друг. с этой комбинацией вы можете вставлять новые записи или обновлять выходящие записи. для этого необходимо иметь уникальный ключ в поле, которое определяет вашу строку как: product_category_id в вашем примере

* таблица с уникальным ключом **

 CREATE TABLE `table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `product_id` varchar(32) CHARACTER SET latin1 DEFAULT NULL, `quantity` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `product_id` (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Образец

 mysql> select * from `table`; Empty set (0,00 sec) mysql> INSERT into `table` (product_id,quantity) Values ('p1',9),('p2',13) ON DUPLICATE KEY UPDATE quantity=VALUES(quantity); Query OK, 2 rows affected (0,01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from `table`; +----+------------+----------+ | id | product_id | quantity | +----+------------+----------+ | 9 | p1 | 9 | | 10 | p2 | 13 | +----+------------+----------+ 2 rows in set (0,00 sec) mysql> INSERT into `table` (product_id,quantity) Values ('p3',9),('p2',15) ON DUPLICATE KEY UPDATE quantity=VALUES(quantity); Query OK, 3 rows affected (0,00 sec) Records: 2 Duplicates: 1 Warnings: 0 mysql> select * from `table`; +----+------------+----------+ | id | product_id | quantity | +----+------------+----------+ | 9 | p1 | 9 | | 10 | p2 | 15 | | 11 | p3 | 9 | +----+------------+----------+ 3 rows in set (0,00 sec) mysql> 

Здесь вы можете использовать любое из следующих требований согласно вашему требованию.

ЗАМЕНИТЕ В

если запись еще не доступна в таблице, она просто вставляет else, если она уже доступна на ней, удалит запись и вставляет новую запись.

 REPLACE INTO table.inventory_item (product_category_id, quantity) SELECT '$quantity' ,'$pcid'; 

ОБНОВЛЕНИЕ КЛЮЧЕЙ DUPLICATE

если запись еще не доступна в таблице, она просто добавит else, если она уже доступна для запуска соответствующей команды обновления.

 INSERT INTO table.inventory_item (product_category_id, quantity) VALUES ('$pcid', '$quantity')" ON DUPLICATE KEY UPDATE table.inventory_item SET quantity='$quantity' WHERE product_category_id='$pcid'; 

Надеюсь это поможет.