嵌套MySQL查询多个隐私检查

时间:2015-09-02 12:18:34

标签: php mysql

我有1条包含useridposttypeidprivacyoriginalpostid

的信息
  

隐私可以是1(所有人),2(朋友),3(朋友和追随者),4(仅限我)

用户可以分享任何用户帖子,但访问他们留言墙的人可以根据userid原始帖子与currentuser

之间的隐私信息查看帖子

我也有函数返回useruser2之间的关系,但在这种情况下使用mysql单查询我怎样才能有条件地处理。

例如,查询返回10个结果,其中4个是共享后现在我已经检查每个帖子,如果用户隐私是1,那么它应该对所有人可见,如果2然后只对那个原始朋友朋友可见< / p>

我已经找出了像

这样的条件
IF(originalpostid!=0,(privacy=1,true,(privacy=2,(ORIGINAL_POST_QUERY & then check if SUBQUERY_TO_RETURN_IF_USER_IS_FRIEND_OR_NOT),(privacy=3,(ORIGINAL_POST_QUERY & then check if SUBQUERY_TO_RETURN_IF_USER_IS_FRIEND_OR_FOLLOWER),(privacy=4,(ORIGINAL_POST_QUERY & then check if CHECK_IF_CURRENTUSER_AND_ORIGINALPOSTID_USERID_IS_SAME),true)))),true)

这个有点凌乱,在这种情况下,我必须一直运行子查询原始邮件详细信息来比较用户ID是否有任何简单的解决方案?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,像这样的查询会这样做: -

SELECT Post.PostID 
FROM Post 
WHERE Post.StatusID=2 
AND Post.privacy = 1
UNION
SELECT Post.PostID 
FROM Post 
INNER JOIN relationship
ON Post.userid = relationship.userid
WHERE Post.StatusID=2 
AND relationship.status = 2
AND relationship.userid_other = $CurrentUser
AND Post.privacy = 2
UNION 
SELECT Post.PostID 
FROM Post 
INNER JOIN relationship
ON Post.userid = relationship.userid
WHERE Post.StatusID=2 
AND relationship.status = 1
AND relationship.userid_other = $CurrentUser
AND Post.privacy = 3
UNION 
SELECT Post.PostID 
FROM Post 
WHERE Post.StatusID=2 
AND Post.userid = $CurrentUser

假设一个这样的关系表: -

CREATE TABLE relationship
(
    userid  INT,
    userid_other    INT,
    status  INT
);

status = 1 for follower, 2 for friend

这是4个联合查询(联合将排除重复)。查询首先获得适合所有人的帖子,第二个帖子适用于当前用户是海报的朋友的朋友,第3个帖子是关于当前用户是海报的追随者的追随者的帖子,第4个获取任何人都可以阅读的帖子。

但要提供更好的东西,我需要知道你们的关系是如何存储的。