php - 如何使用 MySQL Joins 选择允许用户阅读的论坛版 block ?

标签 php mysql join greatest-n-per-group

在这个场景中我有三个主表:类别、版 block 和权限。类别和板表是不言自明的。权限表包含的行将确定是否允许用户读取版 block 中的线程、创建版 block 中的线程、回复版 block 中的线程或管理版 block 中的线程和帖子。在表中,用户对每个操作的能力由 0(关,或假)或 1(开,或真)表示。这些基于用户所属的成员组。

我想做的是创建一个选择类别的查询。它应该只选择具有用户可以阅读的板的类别。基本上,如果一个类别没有任何用户可以阅读的版 block ,它就不会被选中。如果该类别甚至只有一个用户可以阅读的版 block ,则会被选中。

下一个查询是在特定类别中选择用户可以阅读的版 block 。基于与上述相同的原则。显示一个用户无法阅读的看板,只是为了让他们在点击链接后才能发现,这有什么意义?

我自己从来没有真正创建过这样复杂的查询,所以我什至不知道从哪里开始。如果您能帮助我,我将不胜感激。

更新

所以,我决定试一试,这就是我想出的:

$query = "
            SELECT
                b.category_id, b.board_id, b.position,
                p.group_id, p.board_id, p.read
            FROM forum_boards AS b
                INNER JOIN forum_permissions AS p ON (
                        p.board_id = b.board_id,
                        p.group_id = 1,
                        p.read = 1
                )
            WHERE b.category_id = ".$category_id."
            ORDER BY b.position";

请注意,这是获取用户可以阅读的特定类别中的版 block 的查询。目前正在返回以下错误,我不明白为什么。

Operand should contain 1 column(s)

Categories Table Boards Table Permissions Table

最佳答案

因为 Niko 已经提供了使用连接的示例查询,所以我提供了 subquery 版本,以便与已经提供的答案有所不同

第一个子查询是您要求的我想做的是创建一个选择类别的查询。它应该只选择具有用户可以阅读的板的类别。基本上,如果一个类别没有任何用户可以阅读的版 block ,它就不会被选中。如果该类别甚至只有一个用户可以阅读的版 block

我已经添加了条件 status=1 你的 forum_boards 是活跃的,我只是把 group_id=1 所以你必须提供正确的用户组id

SELECT * FROM forum_categories WHERE category_id IN (
SELECT category_id FROM forum_boards WHERE `status`=1 AND board_id IN (
SELECT board_id FROM forum_permissions WHERE group_id=1 AND `read`=1) )

这是你的第二个查询,你要求相同的要求,但这次是选择板,但在一个类别中,我再次添加了根据你的需要设置的条件 status=1 但我没有知道 category_id 所以我只是把它写成 category_id=1 你必须注意它以放置正确的类别 id

SELECT *  FROM forum_boards WHERE `status`=1 AND board_id IN (
SELECT board_id FROM forum_permissions WHERE group_id=1 AND `read`=1) AND category_id=1

希望有道理

关于php - 如何使用 MySQL Joins 选择允许用户阅读的论坛版 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259122/

相关文章:

mysql - 如何在 MySQL GROUP BY 中按 DATE 返回第一条记录?

mysql - 如何使用开始日期和特定时间段查找每个用户的平均数

mysql - 在不同的 MySQL 表中选择一个连接到其他几个的东西

php - 如何更改临时上传路径运行时?

php - 如何连接两个表以查看两个表中是否存在值

php - MySQL,从 $_SESSION ['username' 开始计数]

php - 以编程方式创建文章 : you have an error in your SQL syntax;

MySQL 查询获取最新记录

php - Mac OS X 10.10 php 5.5.14 自由类型支持

javascript - Facebook 登录中电子邮件的未定义值