【问题标题】:Creating a friendship suggestion query that spans 3 Models创建跨越 3 个模型的友谊建议查询
【发布时间】:2011-12-20 21:24:36
【问题描述】:

我可以对以下用于向用户推荐朋友的查询使用帮助

我有三个模型:

User (id, fb_id, org_id)
FbFriends (user_id, fb_id, org_id)
Friendships (user_id, friend_id)

FbFriends 正在缓存用户在 Facebook 上的朋友。友谊是我应用上的友谊。

目标,基于以下条件的回访用户:

  1. 按用户的 org_id 排序
  2. 如果他们已经是两个用户之间的友谊记录,则过滤掉任何人。

是否可以通过一个查询返回基于上述内容的@users?还是我需要使用多个查询来构建它?

谢谢

【问题讨论】:

  • 添加示例输出会有所帮助,我认为查询本身并不困难,但我不能 100% 确定您在寻找什么。是否只是 org_id、user_id、 的列表?
  • 我正在寻找用户的输出。基于上述条件的用户表中的用户列表。清楚吗?
  • 您希望在用户表中看到用户表中的 FBfriends 或 Friendships 中都没有“朋友”吗?或者您想查看每个用户,可能的朋友列表(他们还不是朋友的其他用户?)
  • Sparky,这应该会有所帮助。可以? ;;;对于那个很抱歉。给定一个用户。我首先希望我的应用程序上的所有用户都是他们的 FB 好友。这是由 FbFriends 模型提供的。我希望按 org_id 排序,所以顶部的项目与 current_user 在同一个组织中。然后我想从该列表中删除所有已经是我的应用程序上的 current_users 朋友的用户(友谊)。有帮助吗

标签: sql ruby-on-rails ruby-on-rails-3 activerecord activemodel


【解决方案1】:

在 SQL 中你会这样做:

SELECT * FROM users
JOIN friendships friendships_l ON users.id = friendships.user_id
JOIN friendships friendships_r ON users.id = friendships.friend_id 
WHERE {{some_user_id}} <> users.id
  AND {{some_user_id}} <> friendships_l.friend_id,
  AND {{some_user_id}} <> friendships_r.user_id
ORDER BY users.org_id

在 ActiveRecord 中:

User.
  joins('JOIN friendships friendships_l ON users.id = friendships_l.user_id').
  joins('JOIN friendships friendships_r ON users.id = friendships_r.friend_id').
  where(%[ :uid <> users.id AND
           :uid <> friendships_l.friend_id AND
           :uid <> friendships_r.user_id
         ],
         { :uid => some_user.id }
  ).
  order('users.org_id').all

【讨论】:

  • 谢谢,但这似乎没有考虑到 FbFriends 或 org_id?
  • 另外,得到一个错误“PGError: ERROR: invalid reference to FROM-clause entry for table "friendships" LINE 1: ...ers" JOINfriendshipsfriendlys_l ON users.id = Friendship... ^ 提示:也许您的意思是引用表别名“friendships_l”。 "
  • 谢谢我尝试了 rails 版本,这是我目前不想要的友谊的回报
  • 您的问题并不清楚FbFriends 应该如何参与结果。您所说的只是“FbFriends 在 Facebook 上缓存用户的朋友”,这似乎并不恰当。你能澄清一下吗?
  • 很抱歉。给定一个用户。我首先希望我的应用程序上的所有用户都是他们的 FB 好友。这是由 FbFriends 模型提供的。我希望按 org_id 排序,所以顶部的项目与 current_user 在同一个组织中。然后我想从该列表中删除所有已经是我的应用程序上的 current_users 朋友的用户(友谊)。这有帮助吗?
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 2018-02-28
相关资源
最近更新 更多