MySQL - MAX в левом соединении - PullRequest
0 голосов
/ 02 ноября 2011

Я наткнулся на кирпичную стену на этом, надеюсь, кто-то умнее меня сможет указать мне правильное направление?

У меня есть таблица ORDERS, содержащая заказы (удивительно).

Iтакже есть таблица загрузки.ЗАГРУЗКИ содержат поле ORDERID, которое является идентификатором таблицы заказа.

ЗАГРУЗКИ имеет поле ATTEMPT.Каждая загрузка создает запись в DOWNLOADS, и каждая запись увеличивает значение в ATTEMPT.

Я просто хочу получить значение MAX в ATTEMPT, чтобы я мог сказать пользователям, на какую попытку они (или сколько попыток ониосталось).

ЗАГРУЗКИ могут иметь или не иметь никаких связанных записей, в зависимости от того, загружал ли пользователь еще попытку.При каждой попытке загрузки создается запись в ЗАГРУЗКАХ.

Итак, в упрощенном виде я пытаюсь сделать что-то вроде:

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

Вернее, я пытаюсь получить все пользовательские заказы, с МАКСОМ попыток загрузки, где существуют любые попытки загрузки (записи в ЗАГРУЗКАХ) - или ноль, если их нет.

Я весь день проходил через stackoverflow, просматривая похожие примеры, но почему-то все подобные примерыочень сложно.Есть ли простой (или хотя бы элегантный) способ сделать это?

Хотелось бы получить немного помощи.

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Попробуйте это -

SELECT orders.userid, MAX(downloads.attempt)
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
group by orders.userid
0 голосов
/ 02 ноября 2011
SELECT orders.*,MAX(downloads.attempt) FROM orders 
LEFT OUTER JOIN downloads on downloads.orderid = orders.id 
WHERE orders.userid = '123' 
GROUP BY orders.id
0 голосов
/ 02 ноября 2011

Попробуйте это:

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