我希望用户按照发布的顺序查看最近的帖子,但前提是创建帖子的用户授予用户查看权限的权限。很像谷歌+圈子列表。
这是我的原创设计,任何有关改进的建议,将不胜感激。
USER
Id
Name
...
POST
Id
Message
IsCloseFriendCanView
IsFamilyCanView
IsAcquaintanceCanView
IsDisabledComment
IsPostLock
CreatedByUserId
Created_Time
LastComment_Time
...
POST_COMMENT
Id
PostId
Message
CreatedByUserId
Created_Time
FRIEND
Id
UserId
FriendUserId
IsCloseFriend
IsFamily
IsAcquaintance
IsBlocked
....
FRIEND_LIST (custom friends list only)
Id
UserId (owner)
FriendId
FriendListTypeId
FRIEND_LIST_TYPE
Id
UserId
Name
...
POST_FRIEND (CAN VIEW)
Id
PostId
FriendId
....
POST_FRIEND_LIST (CAN VIEW - custom)
Id
PostId
FriendListTypeId
....
编辑:已更新
答案 0 :(得分:1)
不确定这是否是您想要的,但似乎您还需要一个包含用户和朋友之间关系的表
e.g。
FRIEND
user_id
friend_id
close_friend
在POST上你需要一些东西来识别“所有朋友”,“亲密朋友”或“公开”是否可见。
然后假设$ this_user是登录用户或某个虚拟值,例如-1如果未登录,您可以选择将显示的有效帖子列表
使用
之类的东西select p.id, p.message,
from POST p
where createdbyuserid=$this_user
or (visible='F'
and exists (select 1
from friend f
where p.createdbyuserid=f.user_id
and f.friend_id=$this_user)
)
or (visible='C'
and exists (select 1
from friend f
where p.createdbyuserid=f.user_id
and f.friend_id=$this_user
and f.close_friend='Y')
)
or (visible='P')
order by created_time
如果没有用户登录,则$ this_user将设置为-1,因此只有公开帖子可见。
然后使用此选择的结果为后续选择中的每个帖子获取相关评论。