1

私は(再び)バッグと呼ばれるテーブルを持っています:

+--------+----------+---------+----------+
| 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 を挿入するのではなく、23 に更新する必要があります。そのエントリは既に存在するためです。

4

2 に答える 2

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
于 2013-05-03T05:03:38.543 に答える