我有一个posts
表,其中包含用户帖子,如下所示:
id userid post privacy
1 2 xyz1 1
2 2 xyz2 2
3 3 xyz3 2
...
其中,userid
是海报的ID,privacy
是特定帖子的隐私设置。 privacy
1表示它是公开发布的帖子,而privacy
2表示它仅供朋友使用。
我有另一个表供用户跟随另一个用户:follows
表
id userid followid friends
1 1 2 1
2 1 3 0
3 2 4 1
...
userid
是用户的ID,followid
是userid
所关注的用户的ID。如果这两个用户也是朋友,则friends
为1,如果不是,则为0。
不考虑隐私设置,将这两个表组合起来看起来很简单:
SELECT * FROM posts, follows WHERE (follows.userid = 1 AND follows.followid = posts.userid )
但是,我很难纳入隐私因素。基本上我想要做的是:如果privacy = 1
,它并不重要,因为它是一个公共帖子。但是,如果privacy = 2
仅在friends = 1
。
答案 0 :(得分:0)
我玩过,可能已经解决了问题
SELECT *
FROM posts p
LEFT JOIN follows f ON (p.user_id = f.followid)
WHERE (f.user_id = 1 AND (p.privacy = 1 OR (p.privacy = 2 AND f.friends = 1)))
ORDER BY p.id
如果这是正确的,请告诉我。