我正在创建一个小网站。假设有下表
Table User
user_id | user_name
1 | a
2 | b
3 | c
Table Post
post_id | user_id (fk)
1 | 1
2 | 3
3 | 2
4 | 2
Table Block
block_by_user_id | blocked_user_id (fk)
1 | 2
我想在主页上显示所有帖子。例如,当前用户是用户 1
,该用户必须看到除来自用户 2
的帖子之外的所有帖子,因为用户 1 阻止了用户 2,正如您在阻止<中看到的那样/strong> 表。
假设当前用户 session 为$_SESSION['userid']
。
查询应该如何进行?考虑性能。
这是我迄今为止尝试过的方法,但我认为这可能不是最佳实践。
从帖子中选择*,其中 user_id 不在(从 block 中选择blocked_user_id,其中 block_by_user_id = '$_SESSION[userid]')
我是新手。非常感谢!
最佳答案
解决办法是:
SELECT *
FROM posts p
LEFT JOIN blocks b
ON p.user_id = b.blocked_user_id
AND b.block_by_user_id = 1
WHERE b.block_id IS NULL;
您需要将 block_id 添加到您的 block 表中。您加入被阻止的用户,并通过 block_id IS NULL 过滤它们。如果您有疑问,请发表评论。
关于php - 如何在一条语句中创建三个表的sql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32175959/