也许我没有在Google或SOF.com中正确地进行搜索,但也许有人愿意提供帮助。我知道这不是最好的方法,但我正在学习,我希望有人能以这种方式提供帮助。我有一个PHP / MySQL论坛系统。该论坛设置为具有ID列。
我现在也有2张桌子。一个是组表,另一个是论坛权限表。组表有一个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对应于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是属于该组的用户标识号。限制0,1将限制结果只返回一个结果而不是反复循环。这很好,因为在PHP中,如果MySQL遍历所有结果并找到一个不匹配的组,它仍将返回false。希望这有助于任何试图达到类似目标的人。
答案 0 :(得分:0)
你可以创建一个JOIN语句,并且只从你想要的某一行用MAX()选择最高值。我不知道您的确切表格结构或您如何使用论坛权限进行此操作。如果你的用户表中只有一列(我想这就是你所拥有的,因为通常就是这种情况),你可以在IN语句中使用它(WHERE字段IN(...)。也许它可以说只是说mysql,嘿取这个字段的值(如果这个字段的值是逗号分隔的。)我从来没有这样做过,所以我不知道它是否有效。
也许您应该在phpmyadmin中为我们提供一些截图,以便我们为您提供更准确和具体的信息。
编辑:只需抛出列名即可。