gpt4 book ai didi

php - 选择 MySQL 中某个记录的下一个出现位置

转载 作者:行者123 更新时间:2023-11-29 11:43:16 24 4
gpt4 key购买 nike

我正在为客户构建一个报告模块,他们当前的流程使得我很难完成我想做的事情。数据库是MySQL,模块是用PHP编写的。

本质上,我需要找到在请求的日期之间正在处理的订单。够简单的。然后,我需要找到它的状态第一次设置为发货的时间,因为它可能会在处理和发货之间来回设置多次,如果订单被退回或保修等。

但是,我需要在两个单独的查询中完成此操作。

我可以获取他们正在处理的订单 ID。我的问题是第二个查询,我正在做:

SELECT * FROM status_history WHERE orders_id IN {list_of_ids} AND status = 'shipped' GROUP BY orders_id .

我的问题是此查询生成的“已发货”状态行可能位于所需状态行之前/之后。

我知道主要问题在于他们的流程以及我必须使用的遗留系统,但我无法更改。

我需要做的是: SELECT * FROM status_history WHERE orders_id IN <list_of_ids> AND status = 'shipped' AND date_added > {date at processing} AND date_added < {date at next occurrence of processing, if there is one} GROUP BY orders_id

最佳答案

请勿将SELECT *GROUP BY 一起使用。这是不好的询问和不清晰的思维的表现。所有列的值从哪里来——那些不在 GROUP BY 子句中的值?

如果您想要第一次发货的日期,那么您可以获得该日期:

SELECT sh.orders_id, MIN(date_aded) as FirstShippedDate
FROM status_history sh
WHERE sh.orders_id IN <list_of_ids> AND sh.status = 'shipped' AND
sh.date_added > {date at processing} AND
sh.date_added < {date at next occurrence of processing, if there is one}
GROUP BY orders_id;

注意:您可能不需要两个查询。您应该能够使用子查询来生成列表并在此查询中使用它。

并且,如果您需要完整的记录,请将此结果集连接回原始表。

关于php - 选择 MySQL 中某个记录的下一个出现位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399504/

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