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

标签 php mysql

我正在为客户构建一个报告模块,他们当前的流程使得我很难完成我想做的事情。数据库是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/

相关文章:

php - 将鼠标悬停在图像上,获取打印对话框?

Python - 1000-2000 个 API 请求

mysql - 用连接语句更新mysql?

java - org.hibernate.InstantiationException : No default constructor for entity: : principal. 客户端

php - 使用 SimpleXMLElement 访问数组时出现奇怪的行为

php - 何时以及如何通过 PHP (PDO) 使用多个 MySQL 查询

php - SQL 查询 2 行并且只显示一次具有相同的值

php - 验证错误后的 Laravel 自定义重定向

mysql - 根据mysql中已有表生成 "create table"sql命令

mysql - Xero 与 Mysql 集成