如果列等于0则删除行(mysql)

时间:2018-10-22 21:18:37

标签: javascript mysql node.js

您好,我在构建购物车,但遇到了问题。当前,当有人添加项目时,他们会填写数量并单击添加到购物车。使用此命令将该项目插入购物车表

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。预先感谢您的帮助

1 个答案:

答案 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 可能有帮助。

欢呼