![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
fTR |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.10.2007 Репутация: нет Всего: нет |
Есть три таблицы:
Объявления
Комбинации (привязка направлений к объявлениям, другая служебная информация)
Направления для каждого из объявлений
Необходимо выбрать несколько объявлений, которые попадают под определенные условия (по направлению, пройшли модерацию, етц), отсортированы по цене за клик (цена находится в таблице комбинаций) и чтобы были исключены повторы объявлений (так как на каждое объявление может былть несколько комбинаций, которые удовлетворяют запрос - то повторы встречаются в выборке). Обязательно в результате должны быть отобраны несколько объявлений со всеми полями из таблицы advertisements и полями id, cid из таблицы combinations, чтобы знать по каким именно комбинация произошло совпадение. Более-менее приемлемый вариант по производительности, НО имеем кучу дублирующихся объявлений.
Вариант с подзапросом и урезанием дубликатов через DISTINCT очень сильно проседает в производительности начиная уже от 100 000 строк (а будет не одна сотня тысяч).
ORDER by price DESC LIMIT 10 во внутренний запрос (там, где DISTINCT) добавить не получится, так как там нужна сортировка по полю из DISTINCT. А если во внутреннем запросе усекать дубликаты через GROUP BY - упираемся в ограничение на присутствие в SELECT'e только полей, которые непосредственно участвуют в группировке, или обернутые в агрегатные функции (а ведь поля combinations.id , combinations.cid как то надо вытягивать). Может еще какие варианты выборки без дубликатов для Postgres есть? Буду очень благодарен. |
||||||||||
|
|||||||||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
если одно объявление имеет несколько цен, какая из цен должна использоваться в ранжировании? я предположил что максимальная
Полагаю этот запрос врядли будет работать быстрее. Зато будет работать правильно. Это сообщение отредактировал(а) Zloxa - 14.5.2010, 20:58 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |