n-записей из каждого каталога

sokol

Zavolga.Net
n-записей из каждого каталога

Понится я задавал вопрос как выбрать по одной записи из каждого каталога. Был предложен неплохой вариант в 2 запроса.

Теперь есть такая фигня.

Две таблицы, связь один ко многим. (dirs - items).
Нужно выбрать из каждого каталога по n записей с упорядочиванием по максимальному значению какого либо поля.

Есть идеи?
 

sokol

Zavolga.Net
chira
Я спрашиваю про N-записей из каталога, а не про все.
 

chira

Новичок
если MySQL4
Код:
(select ...
from dirs,items
where catalog = 1 and dirs.id = items.dir_id
order by kakoe_libo_pole desc 
limit 10)
union
(select ...
from dirs,items
where catalog = 2 and dirs.id = items.dir_id
order by kakoe_libo_pole desc 
limit 10)
...
(select ...
from dirs,items
where catalog = n and dirs.id = items.dir_id
order by kakoe_libo_pole desc 
limit 10)
 

chira

Новичок
а что ты надеялся увидеть?
у тебя очень много каталогов?
 

sokol

Zavolga.Net
Да много...
Из самых очевидых решений вижу пока, следующее...

Код:
SELECT item.id, MAX(kakoe_libo_pole), ... FROM dirs JOIN items ON (dirs.id = items.dir_id) GROUP BY dirs.id
В каждом следующем запросе просто исключать те записи которые выдал предыдущий с помощью NOT IN().

Т.е. запросов понадобится ровно N-штук. В моем случае 3.
А еще лучше делать эти запросы раз в день и пихать в другую таблицу.

Я просто жду лучших предложений.
 

sokol

Zavolga.Net
Идентификатор записи с максимальным значением kakoe_libo_pole.
 

chira

Новичок
проверь ... тебя ждут интересные вещи ...
очень большой подводный камень, многие на него натыкаются ...
 

sokol

Zavolga.Net
chira
http://phpclub.ru/talk/showthread.php?s=&threadid=55965

Тема в которой ForJest предлагал данное решение. Я его опробовал на практике на одном из сайтов. НА камни пока не наталкивался.
 

chira

Новичок
то, что там предлагалось и твой SQL это разные вещи
обрати внимание:
SELECT item.id, MAX(kakoe_libo_pole), ...
FROM dirs JOIN items ON (dirs.id = items.dir_id)
GROUP BY dirs.id
 

sokol

Zavolga.Net
chira ну да, ошибся... вместо item.id надо выбирать dirs.id. Но это суть дела не меняет. Лучше-то все равно ничего не предложено.
 
Сверху