我面临一个 mySQL 问题:我有一个包含这些列的 mySQL 表,它存储每个订单和订单的每个状态:
id_order_history / id_employee / id_order / id_order_state / date_add
我想得到一个 *id_order* 的列表,它们在特定的 *id_order_state* 中 - 比如说 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);
这并不是真正的优化,我很确定我可以只用一个查询来做到这一点,但我真的不知道怎么做。
你知道如何使这个更清洁吗?