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 № 1MySQL 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