Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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
是否可以定义一个SQL查询,从一个表中提取一组允许的外键,然后使用它们过滤另一个表?_Sql_Ruby On Rails_Find By Sql - Fatal编程技术网

是否可以定义一个SQL查询,从一个表中提取一组允许的外键,然后使用它们过滤另一个表?

是否可以定义一个SQL查询,从一个表中提取一组允许的外键,然后使用它们过滤另一个表?,sql,ruby-on-rails,find-by-sql,Sql,Ruby On Rails,Find By Sql,具体地说,我试图弄清楚是否有可能生成符合我想要输入RubyonRails的find_by_SQL方法的SQL 假设有一些用户,他们通过一个连接表Friendships循环地连接到其他用户。每个用户都可以创建注释 我希望SQL查询返回给定用户的任何朋友创建的最新100条评论,这样我就可以在一个方便用户查看的地方显示它们 这是一个棘手的问题,因为本质上我希望通过评论作者的外键是否包含在从用户朋友的主键获得的一组键中来过滤评论 编辑:澄清设置。我不确定如何编写模式定义,所以我将用Rails来描述它 c

具体地说,我试图弄清楚是否有可能生成符合我想要输入RubyonRails的find_by_SQL方法的SQL

假设有一些用户,他们通过一个连接表Friendships循环地连接到其他用户。每个用户都可以创建注释

我希望SQL查询返回给定用户的任何朋友创建的最新100条评论,这样我就可以在一个方便用户查看的地方显示它们

这是一个棘手的问题,因为本质上我希望通过评论作者的外键是否包含在从用户朋友的主键获得的一组键中来过滤评论

编辑:澄清设置。我不确定如何编写模式定义,所以我将用Rails来描述它

class User
  has_many :friends, :through => :friendships
  has_many :comments
end
class Friendship
  belongs_to :user
  belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
def Comment
  has_one :User
end

这没那么棘手,你只需要使用连接。要获得评论,您只需加入Friendlifations表和comments表,但您可能还需要从Users表中获得一些有关撰写评论的人的信息

这将从id为42的用户的好友处获得最后100条评论:

select top 100 c.CommentId, c.CommentText, c.PostDate, u.Name
from Friendships f
inner join Users u on u.UserId = f.FriendUserId
inner join Comments c on c.UserId = u.UserId
where f.UserId = 42
order by c.PostDate desc

如果发布表架构定义,则更有可能得到答案