我正在使用Prestashop,我需要验证数据完整性,比较每个订单的当前状态与上次订单历史记录状态。过滤与订单状态不一致的订单状态与订单状态订单历史记录
的订单表:
╔══════════╦═══════════════╦
║ id_order ║ current_state ║
╠══════════╬═══════════════╬
║ 1 ║ 3 ║
║ 2 ║ 1 ║
║ 3 ║ 2 ║
║ 4 ║ 1 ║
╚══════════╩═══════════════╩
的order_history表:
╔══════════════════╦══════════╦════════════════╦═════════════════════╦
║ id_order_history ║ id_order ║ id_order_state ║ date_add ║
╠══════════════════╬══════════╬════════════════╬═════════════════════╬
║ 1 ║ 1 ║ 1 ║ 2016-08-01 11:00:00 ║
║ 2 ║ 2 ║ 1 ║ 2016-08-02 12:00:00 ║
║ 3 ║ 1 ║ 3 ║ 2016-08-03 13:00:00 ║
║ 4 ║ 3 ║ 1 ║ 2016-08-04 14:00:00 ║
║ 5 ║ 3 ║ 2 ║ 2016-08-05 15:00:00 ║
║ 6 ║ 2 ║ 3 ║ 2016-08-06 16:00:00 ║
║ 7 ║ 4 ║ 1 ║ 2016-08-07 17:00:00 ║
╚══════════════════╩══════════╩════════════════╩═════════════════════╩
(自愿错过表是给一个名称的顺序状态:1 = “付费”, 2 =“已确认”,3 =“已发货”...)
通常情况下,current_state顺序必须等于最后的状态历史条目,但有时不是(在我的示例中,对于命令#2,current_state = 1,但最后历史更新的id_order_state是2),这就是我想要揭示的内容。
我这样做是为了让每个最后一个订单状态更新:
SELECT o.id_order, o.current_state, h.id_order_state, max(h.date_add)
FROM orders o, order_history h
WHERE o.id_order = h.id_order
GROUP BY o.id_order, o.current_state, h.id_order_state
ORDER BY o.id_order ASC
但它是不够的,因为首先,我想每个订单的最后更新的唯一状态:
╔══════════╦═══════════════╦════════════════╦═════════════════════╗
║ id_order ║ current_state ║ id_order_state ║ max(h.date_add) ║
╠══════════╬═══════════════╬════════════════╬═════════════════════╣
║ 1 ║ 3 ║ 3 ║ 2016-08-03 13:00:00 ║
║ 2 ║ 1 ║ 3 ║ 2016-08-06 16:00:00 ║
║ 3 ║ 2 ║ 2 ║ 2016-08-05 15:00:00 ║
║ 4 ║ 1 ║ 1 ║ 2016-08-07 17:00:00 ║
╚══════════╩═══════════════╩════════════════╩═════════════════════╝
而且然后添加一个WHERE current_state <> id_order_state
的过滤器,以仅显示损坏的数据(如订单#2):
╔══════════╦═══════════════╦════════════════╦═════════════════════╗
║ id_order ║ current_state ║ id_order_state ║ max(h.date_add) ║
╠══════════╬═══════════════╬════════════════╬═════════════════════╣
║ 2 ║ 1 ║ 3 ║ 2016-08-06 16:00:00 ║
╚══════════╩═══════════════╩════════════════╩═════════════════════╝
完整的SQL请求是否可以执行此操作?
我不清楚你的问题是什么。你似乎想要两个完全不同的东西。 –
哪个版本的prestashop? – sarcom
@ GordonLinoff:我正在寻找SQL请求来给我“第二”的输出,但我提到“首先”是过程逻辑中最精确的。 – Klemart3D