gpt4 book ai didi

MySQL 查询优化,用于按日期和状态对项目进行排序

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

我遇到了 mySQL 问题:我有一个包含这些列的 mySQL 表,它存储每个订单和订单的每个状态:

    id_order_history / id_employee / id_order / id_order_state / date_add 

我想获取处于特定 *id_order_state* 的 *id_order* 列表 - 比方说 10 - 但我不想获得在此特定状态之后状态发生变化的订单,并且不希望收集 7 天以内的订单...

这是我如何做到这一点的:

首先查询以获取订单和日期列表:

SELECT id_order, date
FROM '._DB_PREFIX_.'ps_order_history,
WHERE TO_DAYS(NOW()) - TO_DAYS(date_add) <= 7
AND id_order_state = 10

然后循环只获取没有最新状态的订单:

$query = '   SELECT id_order, date
FROM '._DB_PREFIX_.'ps_order_history,
WHERE ';

foreach ( $listAbove, $item) {
$query =+ '
(( date > $item['date'])
AND ( id_order = $item['id']))
';
}
$orderlist = Db::getInstance()->ExecuteS($query);

这并不是真正的优化,我很确定我可以只用一个查询来完成它,但不知道如何实现。

您知道如何使其更清洁吗?

最佳答案

如果我理解正确的话,例如,您只需要最近状态等于 10 的订单。因此,让我们从获取订单和最新状态开始

SELECT
id_order,
MAX(id_order_history) as m
FROM ps_order_history
GROUP BY id_order

这为我们提供了每个订单的最新订单历史记录项目(假设 id_order_history 是 PK,并且最大值表示最近的订单条目)。现在我们只需搜索该子查询即可找到我们想要的条件。

SELECT
poh.id_order
FROM ps_order_history poh
INNER JOIN
(SELECT
id_order,
MAX(id_order_history) as m
FROM ps_order_history
GROUP BY id_order) sub
ON sub.id_order = poh.id_order
AND sub.m = poh.id_order_history
WHERE poh.id_order_state = 10
AND TO_DAYS(NOW()) - TO_DAYS(poh.date_add) <= 7

关于MySQL 查询优化,用于按日期和状态对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282392/

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