SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.10.2010 00:09:32

MHz
Участник
Откуда: г. Лисичанск
Зарегистрирован: 15.10.2010
Сообщений: 4

Помогите c MAX(), выводится два значения

Доброго времени суток!
Данным запросом вывожу самые качаемые релизы "пользователей" (т.е. из всех загруженных релизов пользователем выбирается только самый качаемый):

$a = mysql_query("SELECT t1.* FROM torrents AS t1 INNER JOIN (SELECT owner, MAX(times_completed) AS tmax
    FROM torrents GROUP BY owner ORDER BY tmax DESC LIMIT 5) AS t2
    ON (t1.owner = t2.owner AND t1.times_completed = t2.tmax)");

owner = ид пользователя
times_completed = сколько раз был скачан релиз

При первом тесте всё хорошо работало, но когда у owner'a появилось два релиза с одинаковым MAX(times_completed) то они стали два и выводиться. Почему? Подскажите пожалуйста как испавить!

Проблема на скрине, у пользователя №8:
http://www.imgup.ru/images_small/acex13124129.jpg

Неактивен

 

#2 16.10.2010 00:27:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите c MAX(), выводится два значения

А какой бы из файлов выбрали бы Вы? А почему не другой? wink

Можете попробовать сгруппировать по owner во внешнем запросе — будут выбраны
какие-то данные этого пользователя из двух строк. Но, разумеется, тогда надо выбирать
во внутреннем запросе больше строк (ведь некоторые могут сгруппироваться), а во внеш-
нем добавить LIMIT 5.

Неактивен

 

#3 17.10.2010 13:03:23

MHz
Участник
Откуда: г. Лисичанск
Зарегистрирован: 15.10.2010
Сообщений: 4

Re: Помогите c MAX(), выводится два значения

Спасибо paulus, разобрался!
Просто добавил GROUP BY times_completed в основной запрос и всё заработало!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson