- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Помогите составить правильный запрос. Есть таблица `table_name`, в ней поля `id` (примари кей, автоинкремент, инт), `rubric_id` (инт) и `date` (дататайм). Много много записей с разными датами и иногда повторяющимися айдишниками рубрик (`rubric_id`).
Нужно выбрать по последней записи из каждой рубрики.
Вообщем получилось составить только такой запрос, но при большом количестве записей нехотелось бы так нагружать сервер.
Зачем выбирать все из полученных данных ещё раз?
Правильно делать так:
select module_name, max(date_modified)
from tracker
group by module_name
P.S. имена подставить свои
Vladimir1, пробывал так, вот результат выборки (первая запись):
date | MAX( `date` )
2008-11-02 15:01:16 | 2008-11-02 15:01:18
То есть еще одна колонка с максимальной дато появилась и все.. Так же пробывал с where `date`=MAX(`date`), ругается на неправильную конструкцию GROUP BY...
Vladimir1, пробывал так, вот результат выборки (первая запись):
date | MAX( `date` )
2008-11-02 15:01:16 | 2008-11-02 15:01:18
То есть еще одна колонка с максимальной дато появилась и все.. Так же пробывал с where `date`=MAX(`date`), ругается на неправильную конструкцию GROUP BY...
Он все правильно написал, первое поле есстественно должно быть не date, а то, что вам нужно. Там причем может быть много полей. Content или чего там у вас еще. Может вам просто id хватит
Он все правильно написал, первое поле есстественно должно быть не date, а то, что вам нужно. Там причем может быть много полей. Content или чего там у вас еще. Может вам просто id хватит
Мне нужна полная запись, а не только даты последних... То есть и id и contents и т.д...
А сейчас все что можно извлечь из этой выборки - id рубрики и дата последней принадлежащей ей записи.
Мне нужна полная запись, а не только даты последних... То есть и id и contents и т.д...
А сейчас все что можно извлечь из этой выборки - id рубрики и дата последней принадлежащей ей записи.
Боже ж ты мой. не думал что все настолько плохо...
Может так попробую объяснить:
при выборке по этому запросу:
добавиться еще одна колонка к результатам этого:
Причем `lastdate` с выборкой связывает только `rubic_id`, id, content и остальные поля не от записи с lastdate, а от записи date..
Я вас незапутал? :)
JonnyB добавил 06.11.2008 в 13:21
neolord, вы бы перед тем как такое писать попробывали бы....
JonnyB добавил 06.11.2008 в 13:27
Для чистоты эксперимента:
дампик таблицы
Наш запрос:
вернет следующую инфу:
1 2008-11-06 12:00:00 Я запись от 2008-11-06 12:00:00 2008-11-06 12:00:00
2 2008-11-06 12:30:00 Меня создали в 2008-11-06 12:30:00 2008-11-06 12:40:00
neolord, оно?
Запутали по самое немогу =)
Видимо я так и не понял структуру вашей таблицы до конца. Без подзапроса вы в любом случае не обойдетесь из-за агрегатной функции, поэтому предлагаю такой вариант
Проверил - работает, посмотрел explainом - вполне приемлимое быстродействие. К тому же подзапрос выполнится всего один раз а не при каждом проходе. Единственный косяк - если у вас поле "времядата" не уникально, т.е. несколько статей могу сразу быть добавлены, тогда так не получится - попадут лишние записи. Еще вариант - выбирать в подзапросе rubric_id, max(date) и сравнивать парами, но как это реализуется в MySQL не знаю.
neolord, блин, вроде такая тривиальная задача, сделать сортировку перед группировкой :(
Всем спасибо, будем подзапросом делать...