更具体地说,我有两张桌子:
1. product table:
id pname
1 camera
2 tv
3 fridge
2. Approval table:
id user_id order status
2 suneel 1 approved
2 raj 2 approved
2 kumar 3 pending
3 suneel 1 approved
3 raj 2 pending
3 kumar 3 pending
3 xxxx 4 pending
每个产品都会通过订单中的批准链。所以我正在寻找一个查询,列出待处理的记录和下一个批准订单项。
查询将只显示每个项目的一条记录。
预期产出:
id pname user_id order status
2 tv kumar 3 pending
3 fridge raj 2 pending
答案 0 :(得分:0)
如果我理解你的逻辑,我会从这样的查询开始,它将返回每次批准的最大订单:
SELECT id, MAX(`order`) as max_approval
FROM approval
WHERE status='approved'
GROUP BY id
然后你可以把它加回原来的表:
SELECT
a.id,
p.pname,
max_approval as `order`,
a2.user_id,
a2.status
FROM
(
SELECT id, MAX(`order`) as max_approval
FROM approval
WHERE status='approved'
GROUP BY id
) a INNER JOIN product
ON a.id = product.id
LEFT JOIN approval a2
ON a.id = a2.id AND a.max_approval=a2.`order`-1
这将在状态批准后返回下一行,但这并不考虑产品无法获得批准,或者只能获得批准且永不待决的事实。根据应用程序的逻辑,这可能是也可能不是问题。