MySQL - MAX在LEFT JOIN TABLE中

时间:2011-11-02 09:35:26

标签: php mysql left-join

我已经在这一块砖墙上打了一堵砖墙,希望比我更聪明的人能指出我正确的方向?

我有一个包含订单的ORDERS表(令人惊讶)。

我还有一个DOWNLOADS表。 DOWNLOADS包含ORDERID字段,该字段是订单表的ID。

DOWNLOADS有一个ATTEMPT字段。每次下载都会在DOWNLOADS中创建一条记录,每条记录都会增加ATTEMPT中的值。

我只是想在ATTEMPT中获取MAX值,因此我可以告诉用户他们正在尝试什么(或者他们已经尝试了多少次)。

下载可能有也可能没有任何相关记录,具体取决于用户是否尚未尝试下载。每次下载尝试,都会在DOWNLOADS中创建一条记录。

因此,在简单化的术语中,我试图做类似的事情:

SELECT orders.*,MAX(downloads.attempt)
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
WHERE orders.userid = '123'

或者更确切地说,我正在尝试获取所有用户订单,下载尝试的最大值为MAX(DOWNLOADS中的记录) - 如果没有,则为null。

我整天都在浏览stackoverflow,看一下类似的例子但不知怎的,所有类似的例子都非常复杂。是否有一种简单(或至少是优雅)的方式?

非常感谢一点帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

试试这个 -

SELECT orders.userid, MAX(downloads.attempt)
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
group by orders.userid

答案 1 :(得分:0)

SELECT orders.*,MAX(downloads.attempt) FROM orders 
LEFT OUTER JOIN downloads on downloads.orderid = orders.id 
WHERE orders.userid = '123' 
GROUP BY orders.id

答案 2 :(得分:-2)

试试这个:

SELECT orders.userid,MAX(IFNULL(downloads.attempt,0))
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
GROUP BY orders.userid