有两个用户
用户1配置文件\u id
3734387944
然后用户2配置文件\u 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
这是post的数据和结构
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链接
1条答案
按热度按时间gojuced71#
正如comment useacase语句sub select中提到的那样,要获得正确的用户id,剩下的只是一个普通的select。
https://www.db-fiddle.com/f/9k3wy4tqrkvggvvyxvkgms/0