gpt4 book ai didi

sql - Rails 中的高级 SQL

转载 作者:行者123 更新时间:2023-12-04 12:23:37 25 4
gpt4 key购买 nike

我有2个模型

class User < AR
has_many :friends
end

class Friend < AR
# has a name column
end

我需要找到所有与“Joe”和“Jack”都是 friend 的用户

知道我如何在 Rails 中做到这一点吗?

最佳答案

一种选择是将每个名称作为单个 INNER JOINS 的参数。在 SQL 中,它会是这样的:

SELECT users.* FROM users
INNER JOIN friends AS f1
ON users.id = f1.user_id
AND f1.name = 'Joe'
INNER JOIN friends AS f2
ON users.id = f2.user_id
AND f2.name = 'Jack'

由于它是 INNER JOINS,它只会显示用户表可以与 f1 和 f2 连接的结果。

并在 Rails 中使用它,也许可以这样做:
class User < AR
has_many :friends

def self.who_knows(*friend_names)
joins((1..friend_names.length).map{ |n|
"INNER JOIN friends AS f#{n} ON users.id = f#{n}.user_id AND f#{n}.name = ?" }.join(" "),
*friend_names)
})
end
end

然后你可以这样调用:
@users = User.who_knows("Joe", "Jack")

关于sql - Rails 中的高级 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10679517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com