Запрос SQL, чтобы найти n последних записей каждого из друзей пользователя - PullRequest
0 голосов
/ 20 октября 2010

У меня есть модель User, у которой есть друзья (User.friends с таблицей присоединения user_id / friend_id, которая называется следующим).У каждого пользователя есть события (таблица событий имеет столбец user_id).

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

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

Есть ли способ, которым я могу сделать это напрямую с Rails?Или я должен использовать запрос SQL?

Спасибо,

Кевин

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Я бы сделал это в запросе SQL следующим образом:

select Events.Summary from Events
join Followings
    on Events.User_Id = Followings.Friend_Id
where Followings.User_Id = @User_Id
order by Events.Date desc
limit 20;

limit 20 - это MySql - то же самое в PostgreSql?

1 голос
/ 20 октября 2010
select e.* from
(select rownum r , e.* from events e where user_id in (our target friends) order by date desc)    
where r < 20 ;

Я не знаю, называется ли rownum rownum в postgres.rownum - номер строкиесли e. * не работает, попробуйте написать каждое поле вручную.out target friends похоже на select user_id2 from friend_connections where user_id1 = targetId union select user_id1 from friend_connections where user_id2 = targetId.Да, я понимаю, что это очень некрасиво.

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