SQL 请求查找用户每个好友的最后 n 条记录
我有一个有朋友的用户模型(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会在这样的 SQL 请求中执行此操作:
limit 20
is MySql - 在 PostgreSql 中是否相同?I'd do it in a SQL request like this:
limit 20
is MySql - is it the same in PostgreSql?我不知道 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
。是的,我知道这非常丑陋。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 likeselect 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.