也许我没有在 Google 或 SOF.com 中正确输入搜索,但也许有人愿意提供帮助。我知道这不是最好的方法,但我正在学习,我希望有人能以这种方式提供帮助。我有一个 PHP/MySQL 论坛系统。论坛设置有ID栏。
我现在也有 2 张 table 。一张是群组表,一张是论坛权限表。组表有一个 ID 列和一个 user_id 列,均为 int。论坛权限表有一个 id、forum_id 和 group_id。基本上我正在尝试查找用户是否属于某个组(组表)以及该组是否被允许在该论坛中(论坛权限表)。问题是用户可以属于多个组,并且每个论坛可以分配有多个组。
是否有一个查询基本上可以只搜索三个表并区分用户是否有权访问论坛?如果只是一组对一个论坛,或者每个用户一组,我可以弄清楚,但在这种情况下我陷入困境。
有什么帮助吗?下面的表结构示例:
这是论坛表
Forum_ID || Forum_Name
1 ||| General tal
k
对于组表:
Group_id ||| Group_name ||| User_ID
1 ||| Administrators ||| 2
对于论坛权限表(Forum_ID 对应论坛表中的 Forum_ID,Group_To_Allow 对应组表中的 Group_ID):
ID ||| Forum_ID ||| Group_To_Allow
1 ||| 1 ||| 1
我能做的最好的格式化。
编辑:
好的,我用 InnerJoin 解决了这个问题。因此使用上面的表结构:
SELECT *
FROM forum_perm
INNER JOIN membergroups
ON forum_perm.forum_groupallow=membergroups.group_id
WHERE forum_perm.forum_id = 1 AND membergroups.user_id = 6
LIMIT 0,1
Forum_perm.forum_id = 1 是要检查组的论坛的 ID 号。 Membergroups.user_id = 6 是属于该组的用户 ID 号。限制 0,1 将限制结果仅返回一个结果,而不是一遍又一遍地循环。这很好,因为在 PHP 中,如果 MySQL 循环遍历所有结果并发现一组不匹配,它仍然会返回 false。希望这对任何试图实现类似目标的人有所帮助。
最佳答案
您可以创建一个 JOIN 语句,并仅使用 MAX() 从您想要的特定行中选择最高值。我不知道您确切的表结构,也不知道您如何使用论坛权限来做到这一点。如果您的用户表中只有一列(我猜这就是您所拥有的,因为通常都是这种情况),您也许可以在 IN 语句中使用它(WHERE 字段 IN(...)。也许它只是说mysql,嘿,取这个字段的值(如果这个字段的值是逗号分隔的)。我从来没有这样做过,所以我不知道它是否有效。
也许您应该为我们提供一些 phpmyadmin 表格的屏幕截图,以便我们为您提供更准确和具体的信息。
编辑:它确实只需抛出列的名称即可。
关于php - MySQL/PHP : Looking for matching records from three tables(Forum permissions),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105023/