我创建了一个小型社交网站,其中包含三个简单的表格,如下所示。
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 的帖子,这是我不想要的。我可以做的这种情况的最佳查询是什么?还请考虑一下我的数据库设计是不是这样的好方法?你可以推荐我,非常感谢:)
你必须检查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']}
)
Run Code Online (Sandbox Code Playgroud)
您还应该在访问$_SESSION数组中的字段时使用引号($_SESSION['userid']而不是$_SESSION[userid])。
| 归档时间: |
|
| 查看次数: |
2307 次 |
| 最近记录: |