我要查询给定两个用户的共同朋友。下面的查询应该可以解决大部分问题,而友谊表应该是不言而喻的,包含user_id
和friend_id
。
SELECT `users`.* FROM `users`
INNER JOIN `friendships` `a` ON `users`.`id` = `a`.`friend_id`
INNER JOIN `friendships` `b` ON `users`.`id` = `b`.`friend_id`
WHERE `a`.`user_id` = 1 AND `b`.`user_id` = 2
让我感到困惑的是如何编写这种语义ActiveRecord
。使用ActiveRecord,您可以加入关联,但只能加入一次。那么你如何在ActiveRecord
中尽可能明白地写这个呢?
答案 0 :(得分:10)
我使用joins
的字符串参数:
User.
joins("INNER JOIN friendships a ON users.id = a.friend_id").
joins("INNER JOIN friendships b ON users.id = b.friend_id").
where("a.user_id" => 1, "b.user_id" => 2)
我不知道使用Active Record进行此类连接的更高级别方法。
答案 1 :(得分:-3)
首先,您应该在用户&之间拥有适当的模型关系。的友谊强>
user model:
has_many :friendships
friendship model:
belongs_to :user
与此: 您可以在迭代中获取 activerecords,如:
users = User.all
users.each do |user|
user.friendships
.....
end
或者,由特定用户,例如:
user = User.first
user.friendships #returns association
or
User.first.friendships
对于 2个特定用户(已给定),您可以这样做:
User.where(id: [1,2]) #array of user id, then get the friendship record as above.
希望这有帮助!