如何多次加入同一个表?
我正在查询给定两个用户的共同朋友。 下面的查询应该完成大部分工作,友谊表应该是不言而喻的,包含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
尽可能明白地写这个呢?
我用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进行这种连接的更高级别的方法。
首先,你应该在用户和友谊之间建立适当的模型关系 。
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.
希望这可以帮助!