我可以使用以下查询的帮助,该查询用于向用户建议朋友
我有三种模式:
User (id, fb_id, org_id)
FbFriends (user_id, fb_id, org_id)
Friendships (user_id, friend_id)
FbFriends正在Facebook上缓存用户的朋友。友谊是我的应用程序的友谊。
目标,根据以下条件返回用户:
是否可以通过一个查询基于上述内容返回@users?或者我是否需要使用多个查询来构建它?
由于
答案 0 :(得分: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