SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.03.2010 18:24:13

Beck
Участник
Зарегистрирован: 17.03.2010
Сообщений: 2

Сложный запрос с множественным Limit

Нужна помощь. Не могу придумать, как сделать следующий запрос.

Есть две таблицы 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/

Заранее огромное спасибо. Так как этот запрос производится на главной странице, то он сильно поможет в плане производительности и скорости загрузки страницы.

Неактивен

 

#2 17.03.2010 19:12:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сложный запрос с множественным Limit

Кажется, тот запрос, который на копипейсте, делает что-то другое smile

Боюсь, что быстрого решения, которое Вы хотите, в данной задачке нету. Вы можете,
например, денормализовывать данные (и хранить 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);

Да, для него список регионов надо заполнять вручную, иначе — курсором,
что будет неудобно (и не быстро). Наверняка, список регионов не так часто
меняется.

Неактивен

 

#3 17.03.2010 19:17:50

Beck
Участник
Зарегистрирован: 17.03.2010
Сообщений: 2

Re: Сложный запрос с множественным Limit

Не часто, спасибо я попробую. Как насчет производительности? Union будет считаться тоже самое, что я бы циклом прогнал SELECT в php или же гораздо быстрее?

Неактивен

 

#4 17.03.2010 19:58:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сложный запрос с множественным Limit

Можно и циклом в PHP, скорость будет сравнимая.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson