gpt4 book ai didi

php - MySQL 和 PHP。下面的代码应该是 MySQL 例程还是 PHP 函数?

转载 作者:行者123 更新时间:2023-11-29 13:11:31 25 4
gpt4 key购买 nike

我正在开发一个 LAMP 项目。这不是给顾客的。这只是一个学习经历。该项目模拟了一个仓库,用于跟踪订单的下达、组装和运输。当订单的所有商品组装完毕后,我希望订单自动将其状态更新为“准备发货”。

我不知道是否可以在 MySQL 例程中编写此逻辑,或者是否应该在 PHP 代码中编写它。

我将重点关注两个关键表:sale 和 sale_detail。

Sale 有两个重要的列:id 和 stage。 Id 是客户订单号。它是唯一的、主键且自动递增的。阶段是订单经历的阶段:0(正在进行中)、1(从仓库取货)、2(准备发货)和 3(已发货)。

Sale_detail 包含每次销售的商品列表。它具有三列:order_id、item_id 和 status。 Order_id 是 sale 中 id 列的外键。 Item_id 是订单中每件商品的 SKU。该表中的状态是二进制的:0表示尚未从仓库中取出。 1 表示有。

这是一些示例数据:

Sale
id…..stage
10…..3
11…..3
12…..1
13…..1
14…..2

Sale_detail
order_id….item_id….status
10….43…1
10….45…1
10….42…1
11….42…1
12….45…0
12….43…1
13….44…1
13….48…1
14…42…2

在上面的示例中,订单 10 和 11 已发货(第 3 阶段)。订单 14 已准备好发货(第 2 阶段)。订单 12 和 13 已在仓库进行检索(第 1 阶段)。

查看 sale_detail 表中的订单 12 和 13。 12号订单已准备就绪。其中一项已取回,但另一项尚未取回。订单 13 已准备发货;其两件元素均已从仓库取回(状态 1)。

因此,如果订单 13 的所有商品都设置为状态 1,则其在销售表中的阶段应设置为 2。我想要一个能够自动执行此操作的流程。首先,它查找状态为 1 的所有处于 sale 状态的订单。对于每个此类订单,它会在 sale_detail 中查找该订单的所有商品。如果 sale_detail 中该订单的所有行都具有阶段 1,则它将 sale 中的阶段设置为 2。

我可以用一对嵌套的 for-each 循环来做到这一点。下面是一些混合的 SQL/Java 伪代码:

int[] stage1_orders := (SELECT id FROM sale WHERE stage = 1);
for(int id : orders){
bool ready = false;
int[] statuses := (SELECT status FROM sale_detail WHERE order_number = id);
for (int status: statuses){
if (status == 0){ready = false; break;}
if(status == 1){ready = true;}
}
if (ready == true){UPDATE sale SET stage = 2 WHERE id = id;}
}

我知道我不能在 MySQL 中执行 for-each 循环。我可以在 MySQL 中写类似的东西吗?或者我最好用另一种语言(Python、PHP 等)编写作业并使其每分钟左右运行一次?

最佳答案

update Sale
set stage = 2
where stage = 1
and 0 = (
select count(*)
from Sale_detail
where order_id = Sale.id
and status <> 1
)

将其放入存储过程中,更新任一表时都会触发该存储过程。

关于php - MySQL 和 PHP。下面的代码应该是 MySQL 例程还是 PHP 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22030148/

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