Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка записей по одной штуке 
:(
    Опции темы
Igor_K
Дата 23.9.2011, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Здравствуйте. 
Никак не могу додуматься как такое сделать. Есть таблица user_history , в ней поля user_id, time. time - дата в unix timestamp. Мне нужно получить самые новые записи для каждого пользователя. То есть по одной записи каждого пользователя с наивысшим значением поля time. Не подскажите как составить запрос? Спасибо
PM MAIL   Вверх
z-END
Дата 23.9.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



а простой вариант с GROUP BY  user_id и ORDER BY time DESC  не поможет?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Igor_K
Дата 23.9.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



z-END, нет, это я уже пробовал. Таким методом только самая первая запись (верхняя) в наборе правильная, а остальные - нет.
PM MAIL   Вверх
AndreyIQ
Дата 23.9.2011, 13:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 2
Всего: 8



Код

SELECT user_id, max(time) FROM user_history GROUP BY user_id

PM MAIL   Вверх
Igor_K
Дата 23.9.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



AndreyIQ, к сожалению тоже не то. Мне нужно получить всю запись с наивысшим значением time, а не конкретно само значение. В таблице есть другие поля, которые меня и интересуют.

Такой запрос работает, но я хочу попроще что-то без подзапросов таких :(
Код

SELECT a.user_id, a.time, a.data FROM user_history AS a WHERE a.time = (SELECT time FROM user_history 
WHERE user_id = a.user_id ORDER BY time DESC LIMIT 0, 1);


Это сообщение отредактировал(а) Igor_K - 23.9.2011, 13:52
PM MAIL   Вверх
AndreyIQ
Дата 23.9.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 2
Всего: 8



Цитата(Igor_K @ 23.9.2011,  13:50)
Такой запрос работает, но я хочу попроще что-то без подзапросов таких :(

ИМХО только с подзапросом
PM MAIL   Вверх
z-END
Дата 23.9.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



кстати а DISTINCT(user_id) тут тоже не поможет?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
AndreyIQ
Дата 23.9.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 2
Всего: 8



Цитата(z-END @ 23.9.2011,  14:02)
кстати а DISTINCT(user_id) тут тоже не поможет?

Нет, DISTINCT обрабатывает все поля выборки.
PM MAIL   Вверх
Igor_K
Дата 23.9.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Цитата(z-END @  23.9.2011,  14:02 Найти цитируемый пост)
кстати а DISTINCT(user_id) тут тоже не поможет? 

А к какому запросу его применить? Я просто не пойму. 

Цитата(AndreyIQ @  23.9.2011,  13:58 Найти цитируемый пост)
ИМХО только с подзапросом 

это плохо..

Это сообщение отредактировал(а) Igor_K - 23.9.2011, 14:22
PM MAIL   Вверх
Akina
Дата 23.9.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Igor_K
Дата 23.9.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Akina, спасибо. То, что надо!  smile 

Еще вопрос про индекс. Если я использую запрос такой:
Код

select user_id,time,data from (
     select max(100000000*p1.time + p1.id) mod 100000000 pid 
       from user_history p1
      group by user_id ) zz
  join user_history p on zz.pid=p.id

то мне нужно составить такой индекс?
Код

ALTER TABLE user_history ADD INDEX ( `user_id` , `time` , `id` ) 


Это сообщение отредактировал(а) Igor_K - 23.9.2011, 16:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0992 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.