/ / Consulta de MySQL: inserte si la entrada está duplicada, de lo contrario actualice los valores de fila existentes - php, mysql, pdo

Consulta de MySQL: inserte si la entrada está duplicada; de lo contrario, actualice los valores de fila existentes: php, mysql, pdo

Tengo una mesa llamada bolso(otra vez):

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

y tengo esto Declaración SQL:

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

despues de preguntar como borrar duplicados
Lo que quiero hacer a continuación (para restringir aún más los duplicados) es cuando un usuario compra un artículo que ya existe en su bolsa, aumenta el item_qty en 1 en su lugar.

me gusta:

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

si yo uso:

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

no debe insertar sino actualizar item_qty a 23 porque esa entrada ya existe.

Respuestas

2 para la respuesta № 1

MySQL soporta INSERT ... ON DUPLICATE KEY UPDATE

pero antes de que funcione, necesitas tener unRestricción única sobre la mesa. Si aún no tiene una restricción única, en función de su ejemplo, está comprobando dos columnas si los valores ya existen,

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

Una vez implementado, ON DUPLICATE KEY UPDATE no trabajará.

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

3 para la respuesta № 2

INSERT ... ON DUPLICATE KEY UPDATE

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