0

具体来说,我试图弄清楚是否有可能生成 SQL 来执行我想要输入 Ruby-on-Rails 的 find_by_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
4

1 回答 1

1

这不是那么棘手,您只需使用连接。要仅获取评论,您只需加入 Friendships 表和 Comments 表,但您可能还需要用户表中的一些信息,以了解撰写评论的人。

这将获得 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
于 2010-03-05T00:55:20.513 回答