【发布时间】:2020-07-09 12:55:34
【问题描述】:
我正在尝试构建一个结帐系统。我有 3 张桌子,一张用于存放产品,一张用于存放用户的购物车,另一张用于存放已完成的订单。
产品
product_id | product_name | stock | unit_price
1 | item1 | 10 | 40
2 | item2 | 5 | 30
3 | item3 | 4 | 29
购物车
user_id | product_id | quantity
1 | 1 | 4
1 | 2 | 6
已完成的订单
user_id | product_id | quantity
1 | 3 | 2
我要做的是在 PRODUCTS 中执行 SELECT 并检查 Stock 是否大于用户购物车中的数量。如果这是真的,那么它会直接在 MYSQL 查询中减少 Stock 计数。
现在我遇到的问题是,我不知道这是否可能。我可以在 PHP 中完成,但需要多次迭代,我想避免这种情况,以防它不是太优化。
我四处搜索,在这里找到了部分解决方案:MySQL - SELECT then UPDATE
但是,我不知道如何在其中包含 IF。
【问题讨论】:
-
我想这可以通过使用 MySQL
IF来完成,但问题是应该这样做。运行两个查询没有任何问题,特别是因为运行其中一个是可选的。您可能过早地进行了优化。另外 - 如果您将其全部合并到一个条件更新中,如果值实际更新或更新被阻止,您将不会收到反馈(似乎是向客户显示的有价值的信息)。 -
如果 all 库存大于(或等于?)购物车中的数量或 any 库存,您要更新吗?
-
@Nick 全部库存。正如您在此示例中看到的那样,我演示了一个不会发生这种情况的情况,因此我不确定这对 MySQL 是否有意义,或者我是否必须使用 PHP 并首先遍历购物车,然后执行在每个购物车项目上选择以检查库存并持有一个布尔值,如果所有库存实际上都更大,则最后在产品表中进行更新,然后清除购物车。它在 PHP 中似乎过于复杂。我想知道是否有办法用 MySQL 更快地做到这一点。 (或者即使这是有道理的)
-
@El_Vanja 你问了一个很好的问题,是吗?请参阅我上面对尼克的评论。我担心如果 2 个用户几乎同时点击结帐会发生什么。
-
哪个版本的 MySQL?