Написание запроса упорядочено по количеству ассоциаций между объектами - PullRequest
0 голосов
/ 13 февраля 2009

Пора реализовать сортировку в моем блогоподобном веб-приложении. Помимо просмотра по дате создания, я хочу, чтобы пользователи также могли сортировать по количеству ответов.

Учитывая, что у меня есть две таблицы blog_posts и ответы, и в этих ответах есть поле с именем blog_post_id (внешний ключ для blog_post, на который он отвечает), как мне написать этот запрос?

"Выберите 30 сообщений в блоге с наибольшим количеством ответов, отсортированных по количеству ответов для каждого сообщения в порядке убывания."

Я тоже хочу разбить это на страницы. Будет ли трудно получить следующие 30, следующие 30 и т. Д.?

Мне кажется, что это не так уж сложно сделать с SQL, я просто не знаю, как это сделать (все еще учусь).

Ответы [ 3 ]

5 голосов
/ 13 февраля 2009

Это должно сработать:

SELECT blog_posts.*, count(replies.blog_post_id) as blog_replies 
FROM blog_posts 
LEFT JOIN replies ON replies.blog_post_id = blog_posts.id 
GROUP BY blog_posts.id 
ORDER BY blog_replies DESC

Вы можете добавить предложение LIMIT и OFFSET в конце, чтобы заставить пейджинг работать.

1 голос
/ 13 февраля 2009

Что-то вроде:

select
    replies = (select count(*) from replies where blog_post_id = b.id),
    id,
    ...
from blog_post b
order by 1 desc
limit 30;
1 голос
/ 13 февраля 2009

У меня нет локальной копии MySQL, с которой я могу возиться, но вы можете сделать что-то вроде этого:

SELECT
blog_post.id,
[other relevant fields from blog_post],
(SELECT COUNT(*) FROM replies WHERE blog_post_id = blog_post.id) 'replies'
FROM
blog_post
ORDER BY FIELD('replies')

Не уверен, будет ли порядок по полю работать с подзапросом, но стоит попробовать.

Удачи!

Ian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...