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 строк и декартво на нее множить таблицу городов, но мне хочется вообще все это одним запросом построить ;-)
А потом на смарти обернуть уже логикой вывода (каждую группу начинать с названия города и т.п.)
Итак, имеется справочник городов
ГОРОД_ID, ГОРОД_НАЗВАНИЕ
ИМЕЕТСЯ ТАБЛИЦА НЕКИХ ОБЪЕКТОВ, одним из атрибутов которой является ГОРОД_ID - т.е. мы указываем, что объект расположен в таком-то городе.
Для вывода анонсов нужно сделать следующее
Выбрать ровно N записей для каждого города, причем из общего списка отсортированного по другим признакам.
Я вижу решение примерно так
1. Делаем каким-либо образом выборку городов, так, чтобы дублировались они N раз
2. Далее делаем LEFT JOIN по ГОРОД_ID c таблицей объектов (накладывая дополнительно ORDER BY чтобы определить какие записи "первые", например по дате добавления)
3. Далее добавляем WHERE IS NOT NULL на ОБЪЕКТ_ID на случай, если в каком-либо городе объектов меньше чем N
4. Ну и первым ORDER BY добавляем ГОРОД.ГОРОД_НАЗВАНИЕ.
Но что-то мне кажется я неверно думаю, по крайней мере не понимаю, как запросом сдублировать строки, а потом все поджойнить. Можно конечно завести временную таблицу ровно из N строк и декартво на нее множить таблицу городов, но мне хочется вообще все это одним запросом построить ;-)
А потом на смарти обернуть уже логикой вывода (каждую группу начинать с названия города и т.п.)