php - 如何在一条语句中创建三个表的sql查询?

标签 php mysql sql

我正在创建一个小网站。假设有下表

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/

相关文章:

php - 页面加载默认值未显示在 jQuery 中?

javascript - 如何删除本地存储中的数据

php - 在 Laravel 数组中创建嵌套下拉样式

javascript - jQPlot X 轴上的日期刻度间隔不起作用

mysql - 如何在 Sequelize.js 中关联两个表到第三个表?

php - 如何优化或加速 mysql 或 php 中的子查询

PHP MySQL - 在 <Select></select> 表单上显示值

用于从相同表中搜索的 mysql 存储过程

c# - sql 到 linq 查询转换

php - 检查登录时是否未激活激活码。 "ONLY"激活码