我有1条包含userid
,posttypeid
,privacy
和originalpostid
隐私可以是1(所有人),2(朋友),3(朋友和追随者),4(仅限我)
用户可以分享任何用户帖子,但访问他们留言墙的人可以根据userid
原始帖子与currentuser
我也有函数返回user
和user2
之间的关系,但在这种情况下使用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是否有任何简单的解决方案?
答案 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个获取任何人都可以阅读的帖子。
但要提供更好的东西,我需要知道你们的关系是如何存储的。