gpt4 book ai didi

mysql - 使用一个 SQL 查询进行 SELECT、UPDATE、DELETE?

转载 作者:可可西里 更新时间:2023-11-01 07:07:55 25 4
gpt4 key购买 nike

我有一个递减值的小语句:

UPDATE cart_items SET quantity = quantity - 1
WHERE cart_id = {$cart_id} AND id = {$cart_item_id}

但是如果该值在递减后变为 0,SQL 是否有可能删除该行?如果是这样,那么我想重新计算与该购物车匹配的行数:

SELECT FROM cart_items WHERE cart_id = {$cart_id}

如果行数为零,我想从另一个表中删除该记录,如下所示:

DELETE FROM cart WHERE id = {$cart_id}

目前似乎需要多个查询来执行此操作,但是否可以在单个 SQL 语句中完成所有操作?

最佳答案

简短的回答是,如果不将额外的查询包装在触发器或过程中是不可能的。

您可以在事务中执行此操作,无需 SELECT,但需要 3 个查询:

START TRANSACTION;

UPDATE cart_items
SET quantity = quantity - 1
WHERE cart_id = {$cart_id}
AND id = {$cart_item_id};

DELETE
FROM cart_items
WHERE quantity = 0
AND cart_id = {$cart_id}
AND id = {$cart_item_id};

DELETE c
FROM cart c
LEFT JOIN cart_items ci
ON ci.cart_id = c.id
WHERE c.id = {$cart_id}
AND ci.cart_id IS NULL;

COMMIT;

最后一个 DELETE 将购物车加入到 cart_items,如果没有找到则删除购物车(cart_items 字段为 NULL)。

我已经包含了可用的标识符来加快 DELETE 的速度,尽管没有它们应该没问题..它只会寻找并拿起任何其他数量为 0 的元素或空车。

关于mysql - 使用一个 SQL 查询进行 SELECT、UPDATE、DELETE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35206818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com