SQL 请求查找用户每个好友的最后 n 条记录

发布于 2024-09-28 10:39:01 字数 315 浏览 3 评论 0原文

我有一个有朋友的用户模型(User.friends 具有名为 followers 的 user_id/friend_id 连接表)。每个用户都有事件(事件表有一个 user_id 列)。

对于活动源,我想要获取一个包含用户朋友的最近 20 个事件的数组。现在,我正在为每个朋友调用最近 20 个事件,按日期对所有内容进行排序,并只保留最后 20 个事件。

我怎样才能直接在数据库中执行此操作,以便我只需要一个请求,而不是每个朋友一个请求?

有没有办法可以直接使用 Rails 来做到这一点?或者我应该使用 SQL 请求?

谢谢你,

凯文

I have a User model which has friends (User.friends with a user_id/friend_id join table called followings). Each user has events (the events table has a user_id column).

For an activity feed, I want to get an array with the last 20 events of the friends of the user. Right now I'm calling the last 20 events for each friend, sorting everything by date and just keeping the last 20 events.

How can I do that directly into the database so that I only need one request instead of one per friend?

Is there a way I can do that directly with Rails? Or should I use an SQL request?

Thank you,

Kevin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

地狱即天堂 2024-10-05 10:39:01

我会在这样的 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 is MySql - 在 PostgreSql 中是否相同?

I'd do it in a SQL request like this:

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 is MySql - is it the same in PostgreSql?

┼── 2024-10-05 10:39:01
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 在 postgres 中是否被称为“rownum”。 rownum - 是行数。如果 e.* 不起作用,请尝试手动写入每个字段。 out target Friends 类似于 select user_id2 fromfriend_connections where user_id1 = targetId union select user_id1 fromfriend_connections where user_id2 = targetId。是的,我知道这非常丑陋。

select e.* from
(select rownum r , e.* from events e where user_id in (our target friends) order by date desc)    
where r < 20 ;

I don't know if rownum is called 'rownum' in postgres. rownum - is number of row. if e.* is not working, try to write every field manually. out target friends is smth like select user_id2 from friend_connections where user_id1 = targetId union select user_id1 from friend_connections where user_id2 = targetId. Yes, i understand that is is very ugly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文