/ / MySQL Query:エントリが重複していれば挿入します。それ以外の場合は既存の行の値を更新します - php、mysql、pdo

MySQL Query:エントリが重複していれば挿入します。それ以外の場合は既存の行の値を更新します - php、mysql、pdo

私にはテーブルがあります バッグ(再び):

+--------+----------+---------+----------+
| bag_id | chara_id | item_id | item_qty |
+--------+----------+---------+----------+
|      1 |        1 |       2 |       22 |
|      2 |        1 |       1 |       55 |
|      3 |        3 |       1 |        2 |
|      6 |        3 |       4 |        2 |
|      7 |        4 |       4 |        2 |
|      8 |        5 |       4 |        2 |
|      9 |        6 |       4 |        2 |
|     10 |        1 |       5 |        1 |
|     14 |        1 |       8 |        1 |
|     15 |        1 |       6 |        1 |
|     18 |        1 |       4 |        1 |
|     19 |        1 |       3 |        1 |
|     29 |        8 |       1 |        1 |
|     30 |        8 |       7 |        1 |
|     33 |        6 |       2 |        1 |
+--------+----------+---------+----------+

私はこれを持っている SQL文

INSERT INTO bag(bag_id, chara_id, item_id, item_qty)VALUES(NULL, :id, :item_id,1)

重複を削除する方法を尋ねた後
私が次にしたいのは、重複をさらに制限するためです。ユーザーが自分のバッグに既に存在するアイテムを購入したとき、代わりにitem_qtyを1増加させることです。

次のように:

if chara_id = exist and item_id exist
item_qty = item_qty + 1
else
#..normal insert

私が使用する場合:

INSERT INTO bag(bag_id, chara_id, item_id)VALUES(NULL, 1, 2)

エントリがすでに存在しているため、item_qtyを挿入したり更新したりする必要はありません。

回答:

回答№1は2

MySQLサポート INSERT ... ON DUPLICATE KEY UPDATE

しかし、それが動作する前に、あなたはテーブルのユニーク制約。固有の制約がない場合は、値がすでに存在する場合は2つの列をチェックしているので、

ALTER TABLE bag ADD CONSTRAINT tb_unique UNIQUE (chara_id, item_id)

実装されると、 ON DUPLICATE KEY UPDATE 動作しないでしょう。

INSERT INTO bag(chara_id, item_id, item_qty)
VALUES(1, 2, 1)
ON DUPLICATE KEY UPDATE item_qty = item_qty + 1

回答№2の場合は3

INSERT ... ON DUPLICATE KEY UPDATE

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html