我创建了一个小型社交网站,其中包含三个简单的表格,如下所示。
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
用户可以屏蔽他们想要屏蔽的任何人,如果屏蔽发生,两个用户将不会再在他们的动态消息中看到彼此的帖子。
从我的表来看,这意味着 user1
和 user2
不会看到彼此的帖子,但“user3”通常会看到每个人的帖子,因为他不属于该表 block 。
select * from Post p
where p.user_id not in
(select b.blocked_to from Block b
where b.block_by = '$_SESSION[userid]')
从 SQL 查询 user1 看不到 user2 的帖子,但 user2 仍然看到 user1 的帖子,这是我不想要的。我能做的针对这种情况的最佳查询是什么? 还请考虑一下我的数据库设计这是好方法吗?你可以建议我,非常感谢:)
最佳答案
您必须检查 block_by
和 block_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']}
)
访问 $_SESSION
数组中的字段时,您还应该使用引号($_SESSION['userid']
而不是 $_SESSION[userid]
).
关于php - 如何使用 mysql 数据库创建阻塞系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623429/