从朋友那里获取帖子(你有权查看)

时间:2014-01-14 23:04:17

标签: sql database performance join

我希望收到用户朋友的所有帖子,但只有他有权查看的帖子。我的数据库中有以下表格(仅包括相关属性):

用户:

userid

发布

postid    authorid

友谊

friendshipid    userid    friendid

权限

postid    userid

每个友谊在表友谊中有2条记录(如果用户1和2是朋友,则会有1 2和2 1添加到表中)。每个帖子在权限表中都有多个记录,此表中的userid表示有权查看帖子的用户(这并不意味着该用户是帖子的作者)。该用户必须是该帖子作者的朋友。

获得良好性能的最佳查询是什么?如果我将authorid添加到表 Permission ,我还可以获得更好的性能吗?

1 个答案:

答案 0 :(得分:2)

获取@UserId的朋友是作者以及@UserId有权查看帖子的所有帖子:

SELECT postid
FROM Post
INNER JOIN Friendship ON Friendship.userid = @UserId AND Post.authorid = Friendship.friendid
INNER JOIN Permission ON Post.postid = Permission.postid AND Permission.userid = @UserId

请注意,性能取决于查询之外的内容,例如索引,但这应该是一个有效的查询。