我希望收到用户朋友的所有帖子,但只有他有权查看的帖子。我的数据库中有以下表格(仅包括相关属性):
用户:
userid
发布
postid authorid
友谊
friendshipid userid friendid
权限
postid userid
每个友谊在表友谊中有2条记录(如果用户1和2是朋友,则会有1 2和2 1添加到表中)。每个帖子在权限表中都有多个记录,此表中的userid表示有权查看帖子的用户(这并不意味着该用户是帖子的作者)。该用户必须是该帖子作者的朋友。
获得良好性能的最佳查询是什么?如果我将authorid添加到表 Permission ,我还可以获得更好的性能吗?
答案 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
请注意,性能取决于查询之外的内容,例如索引,但这应该是一个有效的查询。