0

具体的には、Ruby-on-Railsのfind_by_sqlメソッドにフィードしたいことを実行するSQLを生成できるかどうかを調べようとしています。

結合テーブルFriendshipsによって他のユーザーに周期的に結合されているユーザーがいると想像してください。各ユーザーはコメントを作成することができます。

特定のユーザーの友達が作成した最新の100個のコメントをSQLクエリで返し、ユーザーが見やすい1つの場所にすべてを表示できるようにします。

基本的に、作成者の外部キーがユーザーの友達の主キーから派生したキーのセットに含まれているかどうかでコメントをフィルタリングしようとしているため、これは注意が必要です。

編集:設定を明確にします。スキーマ定義の書き方がよくわからないので、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 テーブルを結合するだけで済みますが、コメントを書いたユーザーの 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
于 2010-03-05T00:55:20.513 に答える