私にはテーブルがあります バッグ(再び):
+--------+----------+---------+----------+
| 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は2MySQLサポート 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