MySQL Query:如果条目重复则插入,否则更新现有的行值

时间:2013-05-03 03:50:03

标签: php mysql pdo

我有一张名为 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)
在询问如何删除重复之后

wat我想做下一步(进一步限制重复)是当用户购买已经存在于他的包中的项目时,它会将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,因为该条目已经存在。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分: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