Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于共同好友的Rails SQL查询_Sql_Ruby On Rails - Fatal编程技术网

用于共同好友的Rails SQL查询

用于共同好友的Rails SQL查询,sql,ruby-on-rails,Sql,Ruby On Rails,我的用户型号如下: 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", cla

我的
用户
型号如下:

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