Задавайте вопросы, мы ответим
Вы не зашли.
Нужна помощь. Не могу придумать, как сделать следующий запрос.
Есть две таблицы ads(объявления) и map_regions(регионы стран)
В таблице ads есть колонка с id регионов из таблицы map_regions
id region text и другие поля
1 1 ...
2 2
region_id region_name
1 ...
2 ...
Нужно вытащить из таблицы объявлений(ads) 28 последних объявлений, чтобы выбралось по 4 для каждого region_id из таблицы(map_regions) и чтобы по region_id 6,7,8 брались, только 4 объявления.
В итоге получается 24 объявления по 4 для каждого региона страны и 4 для трех указанных вручную регионов.
На данный момент запрос выглядит следующим образом:
http://www.copypastecode.com/24546/
Заранее огромное спасибо. Так как этот запрос производится на главной странице, то он сильно поможет в плане производительности и скорости загрузки страницы.
Неактивен
Кажется, тот запрос, который на копипейсте, делает что-то другое
Боюсь, что быстрого решения, которое Вы хотите, в данной задачке нету. Вы можете,
например, денормализовывать данные (и хранить id соответствующих записей, обнов-
ляя их при добавлении объявлений), или действовать каким-то другим способом.
По производительности без денормализации, скорее всего, будет лучше всего объеди-
нение какого-то такого типа:
(SELECT * FROM ads WHERE region = 1 ORDER BY dt DESC LIMIT 4)
UNION
(SELECT * FROM ads WHERE region = 2 ORDER BY dt DESC LIMIT 4)
…
(SELECT * FROM ads WHERE region IN (6,7,8) ORDER BY dt DESC LIMIT 4);
Да, для него список регионов надо заполнять вручную, иначе — курсором,
что будет неудобно (и не быстро). Наверняка, список регионов не так часто
меняется.
Неактивен
Не часто, спасибо я попробую. Как насчет производительности? Union будет считаться тоже самое, что я бы циклом прогнал SELECT в php или же гораздо быстрее?
Неактивен
Можно и циклом в PHP, скорость будет сравнимая.
Неактивен