【发布时间】:2015-09-02 21:42:00
【问题描述】:
我有 1 个带有 userid、posttypeid、privacy 和 originalpostid 的表帖
隐私可以是 1(所有人)、2(朋友)、3(朋友和追随者)、4(只有我)
用户可以分享任何用户帖子,但访问他们墙的人可以根据原始帖子的userid 和currentuser 之间的隐私查看帖子
我也有返回user 和user2 之间关系的函数,但在这种情况下,使用 mysql 单查询如何有条件地处理。
例如查询返回 10 个结果,其中 4 个是共享帖子,现在我必须检查每个帖子,如果用户隐私为 1,那么它应该对所有人可见,如果 2,那么原始帖子所有者的朋友只能像这样看到
我已经弄清楚了一些情况,比如
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 是否有任何简单的解决方案?
【问题讨论】:
-
我建议每次,用户访问用户的网站,然后加载他应该看到的所有帖子,样式如下:SELECT posts WHERE privacy
-
不,在这种情况下,这不是解决方案,您需要 2 个变量用户和访问者,但在我的情况下,只有访问者可供我和用户使用,我必须从每个结果中获取并获取用户 ID来自 originalpostid 记录
-
你的 get_relation 函数返回什么?也许是这样的?从用户 u 中选择 p.posts,帖子 p。 WHERE p.privacy - get_relations(visitorId, (Select userid from users where userId = p.orginalpostId))
-
它返回 2 个用户之间的状态,比如如果你和我是朋友,那么如果我们是未知的,它将返回 1,2,如果你是追随者和朋友,则返回 1,然后返回 1,2,3,如果它我自己然后 1,2,3,4
-
如果我出错了,我很抱歉,但是如果函数返回这些值,我上面的评论应该可以使用 MAX()。 (当然这不是实际代码,而是隐私原则 - MAX(get_relations(visitorId, (SELECT userId WITH orginalpostid ))