1

我有一张叫做bag的桌子(再次):

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

3

INSERT ... ON DUPLICATE KEY UPDATE

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

于 2013-05-03T03:58:54.470 回答
2

MySQL 支持INSERT ... ON DUPLICATE KEY UPDATE

但在它起作用之前,您需要对表有一个唯一的约束。如果您还没有唯一约束,根据您的示例,如果值已经存在,您将检查两列,

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 回答