您好,我在构建购物车,但遇到了问题。当前,当有人添加项目时,他们会填写数量并单击添加到购物车。使用此命令将该项目插入购物车表
INSERT INTO cart(item_id, cart_id, quantity)
VALUES(?,?,?)
ON DUPLICATE KEY UPDATE
quantity = quantity + ${quantity};
好,如果我在购物车中已有一个项目,它可以正常工作,它会添加给定新数量的数量。
因此,如果有人输入0数量,这就是我的问题,我希望将该商品从购物车中删除。现在我有
if (Number(quantity) === 0)
{
const del = `DELETE FROM cart WHERE cart_id=? AND item_id=?`
const values = [cartId, itemId];
connection.query(del, values, (err, results, feilds) => {
if (err) throw err;
res.send('deleted item from cart');
});
}
else
{
const query = `INSERT INTO cart(item_id, cart_id, quantity)
VALUES(?,?,?)
ON DUPLICATE KEY UPDATE
quantity = quantity + ${quantity}`;
const values = [itemId, cartId, quantity];
connection.query(query, values, (err, results, fields) => {
if (err) throw err;
res.send(results);
});
}
那很好,但是我想知道有没有办法用mysql做到这一点?例如
INSERT INTO cart(item_id, cart_id, quantity)
VALUES('the_items_id', 'the_cart_id', quantity)
IF quantity = 0
DELETE FROM cart WHERE card_id='the_cart_id' AND item_id='the_items_id'
就这样您就知道cart_id是与存储在Cookie中的购物车相关联的用户ID。预先感谢您的帮助
答案 0 :(得分:0)
您实际上将无法在一个查询中执行此操作,但是您将能够在一个事务中执行此操作。
基本上您可以
START TRANSACTION;
If(Cart exists)
IF(Item exists in cart)
IF(quatitiy <= 0) -> delete item
Else(add item to cart)
COMMIT;
但是,基本上不可能在一个查询中完成您要查找的内容。 但是要实现该逻辑可以使用一个事务来完成。
在此处阅读:https://dev.mysql.com/doc/refman/8.0/en/commit.html 可能有帮助。
欢呼