在一个多用户系统中,用户a发布ugc时,一种是全部好友可见, 一种设置某些好友(比如b、c)可见, 某些好友不可见(比如e、f两人),那么
a可见的ugc总数是100,列表是全部ugc
b可见的ugc总数是90,列表内容是a的公开ugc和b可见ugc。
e看到的ugc总数是50,列表内容是a的公开ugc和e可见ugc。
看到的列表也是不一样的。
那么在php+mysql中,该如何处理相关的逻辑,表设计如何?
回复内容: 在一个多用户系统中,用户a发布ugc时,一种是全部好友可见, 一种设置某些好友(比如b、c)可见, 某些好友不可见(比如e、f两人),那么
a可见的ugc总数是100,列表是全部ugc
b可见的ugc总数是90,列表内容是a的公开ugc和b可见ugc。
e看到的ugc总数是50,列表内容是a的公开ugc和e可见ugc。
看到的列表也是不一样的。
那么在php+mysql中,该如何处理相关的逻辑,表设计如何?
假设表 post 为用户发布的内容,里面有个标明类型的字段 privacy,值为
0 - 'public'(完全公开)1 - 'protected'(指定可见)
新建一张表 noblock,用来记录指定可见的 post 和可见用户的关系。如:
id postid userid
假设场景为 b 登录,那么他所看的内容读取顺序即为:
1.读取所有 privacy 值为 0 的 post 数据。
2.联合查询 post 和 noblock 表,读取 noblock 表中 userid 为 bid 的数据。
大概写个 mysql 的语句(举例为主,需要测试):
(select * from post where privacy = 0) union (select * from post left join noblock on post.id = noblock.postid where post.privacy = 1 and noblock.userid = bid)