Как мне структурировать БД / построить Запрос, где я сортирую сообщения по количеству друзей, «взаимодействующих» с ней - PullRequest
0 голосов
/ 31 января 2012

Я хочу построить запрос в Rails 3.2 (MYSQL), где я сортирую группу постов по количеству ваших друзей, которые взаимодействуют с ним. Я могу ограничить это до 7 дней .. Мое текущее мышление:

  1. Поддерживать следующие таблицы / отношения: У пользователя много друзей Пост имеет много Взаимодействующих

  2. _ _ :) Я не совсем уверен, как наиболее эффективно построить запрос. Возможно, наивно я бы подумал, что я сначала запросил бы друзей пользователей ... поместил это в массив ... затем запросил интеракторов (последние 7 дней), где user_id находится "в" моем списке друзей .. в этом запросе , ленивый загружать сообщения, а затем подсчитать количество интеракторов на сообщение, прикрепить его к сообщениям, а затем отсортировать их? Должно быть более эффективным способом ..

Спасибо!

1 Ответ

2 голосов
/ 31 января 2012

Предполагая, что есть таблица Friend, содержащая UserID и FriendID, и таблица PostInteraction, содержащая PostID и UserID, вы должны:

select pi.PostID, count(distinct f.FriendID) as Count
from PostInteraction pi
inner join Friend f on pi.UserID = f.FriendID
where f.UserID = @MyUserID
group by pi.PostID
order by count(distinct f.FriendID) desc

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

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