【发布时间】:2014-08-03 13:17:12
【问题描述】:
也许我没有正确地在 Google 或 SOF.com 中进行搜索,但也许有人愿意提供帮助。我知道这不是最好的方法,但我正在学习,我希望有人能以这种方式提供帮助。我在 PHP/MySQL 中有一个论坛系统。论坛设置为有一个 ID 列。
我现在也有 2 张桌子。一个是组表,另一个是论坛权限表。 group 表有一个 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对应Forums表中的Forum_ID,Group_To_Allow对应groups表中的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。希望这可以帮助任何试图实现类似目标的人。
【问题讨论】:
-
您能否通过
SHOW CREATE TABLE forum; SHOW CREATE TABLE group; SHOW CREATE TABLE permission发布它们的实际结构,而不是描述您的表格,并为每个表格发布一小部分行示例。 -
(最终解决方案是跨 3 个表进行两个内部联接)
-
好的,所以如果我进行内部连接(实际上我只需要跨两个表(论坛权限和组表)进行操作,它将返回我需要的搜索。但是,我没有需要它继续循环并找到每一个结果。我需要查询在找到结果后立即停止,然后让 PHP 如果找到匹配结果则返回 true 语句,如果循环遍历但未找到匹配则返回 false。无论如何,一旦找到搜索就停止它?
-
要格式化代码块,突出显示它们并
ctl-k或单击{}编辑器工具栏按钮 - 这些会将它们缩进 4 个空格作为代码块。 -
明白了。感谢关于 InnerJoin 的想法。看上面。我能够解决这个问题。再次感谢!
标签: php mysql html permissions forum