|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.07.2011, 08:35 | #1 |
Форумчанин
Регистрация: 20.02.2010
Сообщений: 229
|
MAX \ MIN sql реакции
Доброго времени суток.
Столкнулся с такой вот проблемой, есть таблица с несколькими полями, одно из них айди с другой таблицы, другое юникс время, другое мыло. В запросе нужно выбрать айди юзера где время самое маленькое, т.е. юзера который самый первый выслал письмо на мыло вот запрос SELECT MIN(dateinvite), user_id FROM myfriend WHERE mail ='kon@mail.ru' по логике вещей все верно, он как надо выдает нужную запись (их сделано 3 для тестов) НО, поменяв MIN на MAX я получил точно такой же результат, что и натолкнуло меня на мысль что что-то в моем запросе не верно. хотя записи по времени явно отличаются dateinvite | user_id | mail ____________________________ 1310616566 | 9895 | kon@mail.ru 1310616747 | 1001 | kon@mail.ru 1310616793 | 1002 | kon@mail.ru и не важно что я пишу MIN или MAX мне выдает : dateinvite - 1310616566 user_id - 9895 кто-то сталкивался с подобным??
думай как баг, действуй как баг, и ты найдешь баг )
|
14.07.2011, 09:20 | #2 |
Старожил
Регистрация: 09.09.2008
Сообщений: 2,624
|
MIN, MAX функции, используемые в операторах GROUP BY.
Если нет GROUP BY, то ф-я примет на входе 1 первое значение из полученных по WHERE строк. ORDER, LIMIT - используйте Код:
Стрелок-охотник
|
14.07.2011, 09:25 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
у вас принципиально НЕВЕРНЫЙ запрос.
Нормальные СУБД (MS SQL, Oracle) будут ругаться на такой запрос. и примерно такими словами: попытка использовать в запросе поле user_id, которое не указано в конструкции GROUP BY но, если Вы добавите поле user_id в группировку, Вы получите минимальную (максимальную) дату по каждому пользователю отдельно! Задачу можно решить так: первый вариант. не помню, как там с поддержкой вложенных запросов в MySQL вроде бы должны быть. Код:
учтите, что, теоретически, может вернуться НЕСКОЛЬКО user_id (если у нескольких одинаковое минимальное (максимальное) dateinvite при желании с этим легко побороться. ну, например, брать MIN(user_id) или MAX(user_id) или ограничить выборку через LIMIT ... ______________ ДОБАВЛЕНО mv28jam, согласен, Ваш вариант запроса проще и эффективнее!! Последний раз редактировалось Serge_Bliznykov; 14.07.2011 в 09:28. |
14.07.2011, 10:05 | #4 |
Форумчанин
Регистрация: 20.02.2010
Сообщений: 229
|
Serge_Bliznykovспасибоо, запрос работает на ура.
А по поводу одинаковых значений в dateinvate я сомневаюсь что 2 и более челов в одну и ту же секунду жмакнут по кнопке, и у них одинаково быстро отработаются скрипты)
думай как баг, действуй как баг, и ты найдешь баг )
|
14.07.2011, 10:20 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
пожалуйста.
кстати, mrgrudge, можете смело брать запрос mv28jam Он проще и (в общем случае) - эффективнее. в нём есть нюансик, он всегда вернёт только одного пользователя, даже если таких (с одинаковым временем) - несколько. Но в Вашем случае подобное поведение - это только плюс, а не минус! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
max и min | Кристинка89 | Общие вопросы C/C++ | 2 | 23.02.2011 15:24 |
Матрица Min-Max и Max-Min | boog | Помощь студентам | 3 | 23.12.2010 13:19 |
MAX, MIN ='MT4'|ASK!....... | lite | Microsoft Office Excel | 7 | 27.07.2010 16:46 |
подпрограма(max/min) | misha25525 | Помощь студентам | 2 | 07.04.2010 19:45 |
min max | Alpha_Dog | Фриланс | 10 | 15.03.2010 19:27 |