0

有两个用户

用户 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

这是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链接

4

1 回答 1

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
)
...

https://www.db-fiddle.com/f/9K3wy4tqRKVGgvvyxvkgMS/0

于 2018-11-11T18:57:12.837 回答