簡體   English   中英

Rails SQL查詢共同的朋友

[英]Rails SQL query for mutual friends

我的User模型如下所示:

has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed

has_many :reverse_relationships, foreign_key: "followed_id",
                                 class_name:  "Relationship",
                                 dependent:   :destroy
has_many :followers, through: :reverse_relationships, source: :follower

我想要的是原始SQL查詢,以獲取給定用戶遵循並隨后返回的用戶。

目前,我只獲得了我關注的用戶的ID:

followed_user_ids = "SELECT followed_id FROM relationships
                             WHERE follower_id = #{user.id}"

我有一個返回共同朋友的rails方法,但是我想要等效的SQL:

def mutual_friends
    # interesect both arrays to find similar elements
  self.followed_users & self.followers
end

這樣的事情應該工作

SELECT followed_id
FROM relationships
WHERE follower_id = #{user.id} AND followed_id IN (
    SELECT follower_id FROM relationships WHERE followed_id = #{user.id} 
)

請像這樣使用它,讓我知道它是否適合您。

has_many :company_friendships, autosave: true
has_many :company_friends, through: :company_friendships, autosave: true
has_many :inverse_company_friendships, class_name: "CompanyFriendship", foreign_key: "company_friend_id", autosave: true
has_many :inverse_company_friends, through: :inverse_company_friendships, source: :company, autosave: true  

def mutual_company_friends
  Company.where(id: (company_friends | inverse_company_friends).map(&:id))
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM