в результате запроса перепутались id

BoBka-altRUist

Новичок
в результате запроса перепутались id

есть у меня таблица users_month :

MID UID exp time timeux
3 141 398.19 2008-12-00 1230328291
5 19 111.32 2008-12-00 1230328616
18 18 89.60 2008-12-00 1230332038
304 210 88.34 2009-01-00 1231290865
310 217 77.20 2009-01-00 1231357972
163 141 70.26 2009-01-00 1230757439
308 216 65.72 2009-01-00 1231337716

выполняю запрос:

SELECT `UID` , `exp` , `time` , MAX( `exp` ) AS `max`
FROM `users_month`
GROUP BY `time`
ORDER BY `time` ASC
LIMIT 0, 30

получаю результат:
UID exp time max
20 28.81 2008-12-00 398.19
25 4.86 2009-01-00 88.34

т.е. получить максимальное занчение `exp` у юзера `UID` за месяц (в данный момент в базе только два месяца).
в полученном результате значение max правильное, time вроде тоже, а вот UID и exp не те что нужно :(
в чем моя ошибка?
 

Фанат

oncle terrible
Команда форума
в том, что база не знает, какой id из всех найденных для тебя правильный.
 

zerkms

TDD infected
Команда форума
подобный вопрос задаётся раз в месяц. ищи.
 

BoBka-altRUist

Новичок
спасибо за помощь...

для последователей: походу дела mysql когда какому-то запросу делает Group он сливает строки вместе и у таких строк конечно же убиваются id и другие поля, он запоминает первые значения этих полей, которые ему попадаются, потому ему надо подсунуть первыми те, что нам нужны (с мкаксимальными значениями exp'ы)

SELECT tmp.UID, tmp.exp, tmp.time
FROM (
SELECT `UID` , `exp` , `time`
FROM `users_month`
ORDER BY exp DESC
) AS tmp
GROUP BY tmp.time

внутренним запросом сортируем по значению exp а внешним делаем группировку по дате, таким образом даже если несколько значений с одинаковой датой верху, после группировки они должны исключиться.
не знаю может это неправильное решение или еще какой косяк, но гуру превратились в роботов... :-/
 

Mad Dogg

Новичок
Я вот что то не пойму. Тут нужен вывод всех записей отсортированных по exp или нужно просто выбрать одного, у которого exp самый максимальный ??

туманное вы тут что то рисуете...

-~{}~ 09.01.09 23:50:

ЗЫ. насчет местных гуру. Большинство вопросов, которые задавал лично я, можно было бы решить и без чьей либо помощи. А гуру нужны для реально сложных проблем. Пока с такими не сталкивался. Нужно просто немного почесать в затылке )))
 

BoBka-altRUist

Новичок
нет нужно получить например 30 юзеров с наибольшим exp

з.ы. ну вобщем я тоже в основном сам: либо нахожу где-то, либо методом тыка, либо если два первых не получили должного результата, то лезу в доки... ибо на вопросы в форумах уходит много времени, чесно говоря, завидую тем людям которые отвечают в форумах... у них есть время и желание.
 

Mad Dogg

Новичок
как насчет выборки всех с максимальным експ и указанием лимита 30 ??

-~{}~ 10.01.09 00:37:

упс. уже было. забыл. сгруппируй по этому самому exp

-~{}~ 10.01.09 00:40:

повторный взгляд на запрос дает возможность предположить вот что:
SELECT *
FROM `users_month`
GROUP BY `time`
ORDER BY `exp` ASC
LIMIT 0, 30

Выведутся первые 30 чуваков с максимальными значениями exp. Сортировка жи
 

BoBka-altRUist

Новичок
Mad Dogg а в первом посте было тоже самое по сути... просто при таком запросе выйдут id-key не те к которым принадлежат максимальные значения `exp`
 
Сверху