有两个用户
用户1 profile_id
3734387944
然后输入用户2的Profile_id
1421536173
有一个名为friends的表,其结构为
from_profile_id
to_profile_id
request
blocked_by
这是用户的数据和结构
var_id profile_id fullname firstname lastname
180 3734387944 John Louis Domincel John Louis Domincel
181 1421536173 James Domincel James Domincel
这是朋友的数据和结构
from_profile_id to_profile_id request blocked_by
3734387944 1421536173 3 3734387944
这是帖子的数据和结构
id profile_id text
1 3734387944 POST OF USER 1
2 1421536173 POST OF USER 2
使用此查询,我可以选择每个用户的所有帖子
SELECT * FROM post ORDER BY var_id DESC
但是我想过滤它: 用户1已阻止用户2,因此他们两个都无法接收每个用户帖子,“相同功能”。如果不是朋友,但是如果他们是朋友,数据将显示在每个用户中。
Request Legend
1 = Friend Request
2 = Friends
3 = Blocked
我已经尝试过另一个查询:但是,如果仅被阻止,则用户1可以看到用户2的帖子,而用户2不能看到用户1的帖子。我想要 对其进行修改,如果“被阻止”而不是“朋友”,则使他们两个看不到每个用户的帖子
SELECT u.*,f.*
FROM post AS u
LEFT JOIN friends AS f
ON f.blocked_by = u.profile_id AND
f.blocked_by <> "3734387944" AND
(
f.to_profile_id = "3734387944" OR
f.from_profile_id = "3734387944"
) AND
f.request = 3
WHERE f.from_profile_id IS NULL
这是一个DB-FIDDLE LINK
答案 0 :(得分:1)
如评论中所述,使用CASE语句子选择来获取正确的用户ID,其余的只是普通选择。
...
WHERE u.profile_id IN (
SELECT CASE WHEN blocked_by = ? THEN from_profile_id ELSE to_profile_id END AS friend_id
FROM friends
WHERE (from_profile_id = ? OR to_profile_id = ?) AND request = 1
)
...