Как отсортировать поля в 1 таблице по значениям во 2?

Добрый день.
Пытаюсь прикрутить к модулю статей в opencart возможность сортировки по кол-ву комментариев в записи.

Первая таблица этого модуля содержит данные о, собственно, записях,
Вторая таблица содержит комментарии с указанием id записи (из первой табл.), в которой размещается.
Т.е.
1) oc_blog (blog_id, text, title )
2) oc_blog_comment (blog_id, comment)

Нужно отсортировать посты с учетом кол-ва комментов в каждой.
Подскажите правильный sql запрос.
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@viras777
вариант 1 (с оконными функциями):
select distinct p.blog_id, p.text, count(w.blog_id) over (partition by w.blog_id) from oc_blog p, oc_blog_comment w where w.blog_id = p.blog_id order by 3 desc limit 5;
вариант 2 (с пред. подсчётом):
select p.blog_id, p.text, t.count from oc_blog p, (select blog_id, count(blog_id) from oc_blog_comment group by blog_id ) t where p.blog_id=t.blog_id order by t.count desc limit 5;

Первый вариант на моей выборке раза в 3 медленнее, в нём оконная функция выполняется для каждой строки.
Второй вариант к тому же удобнее в будущем ограничивать, например, статьи не старше месяца, запихнуть во внутренний селект.

ПыСы, лимит исключительно для удобства.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы