2016-12-03 2 views
2

mysqlデータベースに "inventory_item"という名前のテーブルがあります。 「id」、「product_id」および「quantity」は表の列です。 "id"は主キーで、レコードが挿入されると自動的に生成されます。mysqlは、テーブルにまだ存在しない場合は複数のレコードを更新または挿入します。

複数のレコードをテーブルに挿入するフォームをユーザーが送信すると、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); 
} 
+0

あなたは単に既存のアイテムの以前の数量で数量を更新するか、古い数量を追加したいですか? –

+0

複数のステートメントを発行する必要があるので、データの整合性を維持するために、トランザクション内でこれを行うようにしてください( 'begin'と' commit')。 – cherouvim

答えて

2

INSERT INTO ..... DUPLICATE KEY ....あなたの友人イスト ON。この組み合わせでは、新しいレコードを挿入したり、既存のレコードを更新したりすることができます。このために、あなたのような行を定義フィールドに一意のキーが必要である:あなたのサンプル

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> 
1

ここでは、あなたの要件ごとに、次のいずれかを使用することができます。

レコードは、それはそれですでに利用可能であるならば、それは単にレコードを削除し、新しいレコードを挿入します他に挿入しますテーブルの上にまだ利用できない場合

INTO REPLACE。

DUPLICATE KEY UPDATE

ON

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

レコードがすでにそれはすでにそれぞれのupdateコマンドを実行する上で利用可能な場合、それは単に他に挿入するテーブルの上に使用できない場合。

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'; 

これが役に立ちます。

関連する問題