Выборка одним запросом ровно N записей имеющих одинаковое значение какого-либо поля.

alexhemp

Новичок
Выборка одним запросом ровно N записей имеющих одинаковое значение какого-либо поля.

Итак, имеется справочник городов

ГОРОД_ID, ГОРОД_НАЗВАНИЕ

ИМЕЕТСЯ ТАБЛИЦА НЕКИХ ОБЪЕКТОВ, одним из атрибутов которой является ГОРОД_ID - т.е. мы указываем, что объект расположен в таком-то городе.

Для вывода анонсов нужно сделать следующее

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

Я вижу решение примерно так

1. Делаем каким-либо образом выборку городов, так, чтобы дублировались они N раз
2. Далее делаем LEFT JOIN по ГОРОД_ID c таблицей объектов (накладывая дополнительно ORDER BY чтобы определить какие записи "первые", например по дате добавления)
3. Далее добавляем WHERE IS NOT NULL на ОБЪЕКТ_ID на случай, если в каком-либо городе объектов меньше чем N
4. Ну и первым ORDER BY добавляем ГОРОД.ГОРОД_НАЗВАНИЕ.

Но что-то мне кажется я неверно думаю, по крайней мере не понимаю, как запросом сдублировать строки, а потом все поджойнить. Можно конечно завести временную таблицу ровно из N строк и декартво на нее множить таблицу городов, но мне хочется вообще все это одним запросом построить ;-)

А потом на смарти обернуть уже логикой вывода (каждую группу начинать с названия города и т.п.)
 
Сверху