Как отсортировать поля в 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 медленнее, в нём оконная функция выполняется для каждой строки.
Второй вариант к тому же удобнее в будущем ограничивать, например, статьи не старше месяца, запихнуть во внутренний селект.

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

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

Похожие вопросы