Mysql查询根据最大订单获取记录

时间:2014-09-24 19:00:29

标签: mysql join

更具体地说,我有两张桌子:

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

1 个答案:

答案 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

这将在状态批准后返回下一行,但这并不考虑产品无法获得批准,或者只能获得批准且永不待决的事实。根据应用程序的逻辑,这可能是也可能不是问题。