powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / выборка по N последних товаров каждой категории...
9 сообщений из 9, страница 1 из 1
выборка по N последних товаров каждой категории...
    #32693178
Есть таблица, скажем, товаров. Как выбрать, к примеру, по 4 товара каждой категории одним запросом, ещё и отсортированых по последним ID?
Я пока такого в теории не находил. Вопрос больше алгоритмический...
Думаю поиграться надо с переменными.

ЗЫ: возможно выйдёт двумя запросами. Просто не хочется делать запрос на каждую категорию. А запрос этот актуален и для новостных сайтов и для форумов...
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32693838
Dr. Yes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще вопрос очень интересный... Надо немного подумать...
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32693848
Dr. Yes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее всего, всё-таки придётся ручками перебирать полученный набор строк...
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32693920
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранить идентификаторы на новинки в отдельной таблице. Добавлять в нее новый идентификатор при добавлении новости и удалять при этом самый старый из этой категории.
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32694682
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно нагородить в 5 этажей подзапросов по принципу Выбрать max(id), где id < Выбрать max(id), где id < Выбрать max(id)...
Короче, в самом низу должен быть максимальный id из таблицы, чуть выше - максимальный id, который меньше максимума и т.д.
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32703097
Возвращаясь к проблеме - вот чего удалось добиться 2-мя запросами.

Код: plaintext
SET @i:= 0 ,@c1:= 0 ,@c2:= 0 ,@c14:= 0 ,@c20:= 0 ,@c24:= 0 ,@c27:= 0 ,@c28:= 0 ,@c30:= 0 ,@c43:= 0 ,@c50:= 0 ,@c44:= 0 ,@c60:= 0 ,@c53:= 0 ,@c54:= 0 ,@c70:= 0 ,@c80:= 0 
Код: plaintext
SELECT nid, ncat, if(ncat= 1 , @c1:=@c1+ 1 ,if(ncat= 2 , @c2:=@c2+ 1 ,if(ncat= 14 , @c14:=@c14+ 1 ,if(ncat= 20 , @c20:=@c20+ 1 ,if(ncat= 24 , @c24:=@c24+ 1 ,if(ncat= 27 , @c27:=@c27+ 1 ,if(ncat= 28 , @c28:=@c28+ 1 ,if(ncat= 30 , @c30:=@c30+ 1 ,if(ncat= 43 , @c43:=@c43+ 1 ,if(ncat= 50 , @c50:=@c50+ 1 ,if(ncat= 44 , @c44:=@c44+ 1 ,if(ncat= 60 , @c60:=@c60+ 1 ,if(ncat= 53 , @c53:=@c53+ 1 ,if(ncat= 54 , @c54:=@c54+ 1 ,if(ncat= 70 , @c70:=@c70+ 1 ,if(ncat= 80 , @c80:=@c80+ 1 , 0 )))))))))))))))) as cnt FROM news ORDER BY ndate LIMIT  10 ;

nid ncat cnt
450613 28 1
450618 28 2
450617 28 3
450614 27 1
450616 28 4
450615 2 1
450631 28 5
450630 28 6
450619 28 7
450629 28 8

Вопрос как отфильтровать хитро полученые записи -
WHERE cnt<=4 - не проходит, переменные считаются после выборки записей.
HAVING cnt <=4 - не проходит, in the HAVING, GROUP BY, or ORDER BY clause, you can't refer to an expression that involves variables that are set in the SELECT part.
и хочется, и колется...
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32703113
Эврика!!!
Код: plaintext
1.
2.
SELECT nid, ncat FROM news 
WHERE if(ncat= 1 , @c1:=@c1+ 1 ,if(ncat= 2 , @c2:=@c2+ 1 ,if(ncat= 14 , @c14:=@c14+ 1 ,if(ncat= 20 , @c20:=@c20+ 1 ,if(ncat= 24 , @c24:=@c24+ 1 ,if(ncat= 27 , @c27:=@c27+ 1 ,if(ncat= 28 , @c28:=@c28+ 1 ,if(ncat= 30 , @c30:=@c30+ 1 ,if(ncat= 43 , @c43:=@c43+ 1 ,if(ncat= 50 , @c50:=@c50+ 1 ,if(ncat= 44 , @c44:=@c44+ 1 ,if(ncat= 60 , @c60:=@c60+ 1 ,if(ncat= 53 , @c53:=@c53+ 1 ,if(ncat= 54 , @c54:=@c54+ 1 ,if(ncat= 70 , @c70:=@c70+ 1 ,if(ncat= 80 , @c80:=@c80+ 1 , 0 )))))))))))))))) <=  4  
ORDER BY ncat, ndate LIMIT  56 

Решил, но...
Время выполнения запроса - порядка 0,3-0,5 сек.
Если заменить это на 20 запросов, использующих индексы - 20*(0,0005) сек.

ПРОИГРЫВАЕМ В СКОРОСТИ НА ПОРЯДОК!
Зато в красоте выиграш. Что думаете?
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32787792
Alex Hemp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот и у меня похожий вопрос

http://www.sql.ru/forum/actualthread.aspx?tid=139052

Но если в скорости на порядок, сделаю несколько запросов тогда...
...
Рейтинг: 0 / 0
выборка по N последних товаров каждой категории...
    #32787838
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что говорит EXPLAIN?)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / выборка по N последних товаров каждой категории...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]