【问题标题】:MySQL/PHP: Looking for matching records from three tables(Forum permissions)MySQL/PHP:从三个表中寻找匹配的记录(论坛权限)
【发布时间】: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


【解决方案1】:

您可以创建一个 JOIN 语句,并且只使用 MAX() 从您想要的特定行中选择最大值。我不知道您的确切表结构或您如何使用论坛权限进行操作。如果您的用户表中只有一列(我想这就是您所拥有的,因为通常是这种情况),您也许可以在 IN 语句中使用它(WHERE 字段 IN(...)。也许它可以说mysql,嘿嘿取这个字段的值(如果这个字段的值是逗号分隔的)。没做过所以不知道行不通。

也许您应该从您在 phpmyadmin 中的表格中截取一些屏幕截图,以便我们为您提供更准确和具体的信息。

编辑:它只适用于抛出列的名称。

【讨论】:

  • 所以解释一下表格(我似乎无法按回车回复):
    Forum_ID ||论坛名称
    1 |||一般谈话。

    对于组表:

    Group_id |||组名 |||用户 ID
    1 |||管理员 ||| 2


    对于论坛权限表:
    ID |||论坛_ID ||| Group_To_Allow
    1 ||| 1 ||| 1
    希望这能更好地解释它。我的回复似乎仍然无法正确格式化。
  • @user1924218 不要在 cmets 中发布此内容。请在上面编辑您的问题以包含表格结构。
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2012-03-04
  • 2012-12-05
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多