如何使用 mysql 数据库创建阻塞系统?

Mar*_*cus 2 php mysql sql

我创建了一个小型社交网站,其中包含三个简单的表格,如下所示。

Table User
id (pk)  | user_name
1       | a
2       | b
3       | c

Table Post
id (pk)  | user_id (fk)
1       | 1
2       | 3
3       | 2
4       | 2

Table Block
id (pk) | block_by (fk)  | blocked_to (fk)
1       | 1              | 2
Run Code Online (Sandbox Code Playgroud)

用户可以阻止他们想要的任何人,如果阻止发生,两个用户将不再在他们的新提要上看到彼此的帖子。

从我的表来看,这意味着user1并且user2不会看到彼此的帖子,但“user3”通常会看到每个人的帖子,因为他不属于表块。

    select * from Post p 
where p.user_id not in 
(select b.blocked_to from Block b  
where b.block_by = '$_SESSION[userid]')
Run Code Online (Sandbox Code Playgroud)

从 SQL 查询 user1 看不到 user2 的帖子,但 user2 仍然看到 user1 的帖子,这是我不想要的。我可以做的这种情况的最佳查询是什么?还请考虑一下我的数据库设计是不是这样的好方法?你可以推荐我,非常感谢:)

mar*_*ump 5

你必须检查block_byblock_to字段。

SELECT * FROM Post p 
WHERE p.user_id NOT IN (
    SELECT b.blocked_to AS userId FROM Block b  
    WHERE b.block_by = {$_SESSION['userid']}
    UNION DISTINCT 
    SELECT b.blocked_by AS userId FROM Block b  
    WHERE b.block_from = {$_SESSION['userid']}
)
Run Code Online (Sandbox Code Playgroud)

您还应该在访问$_SESSION数组中的字段时使用引号($_SESSION['userid']而不是$_SESSION[userid])。