【问题标题】:Mysql Query Relations M-M TableMysql查询关系M-M表
【发布时间】:2011-07-26 03:11:43
【问题描述】:

我在 MySQL 中进行查询时遇到了一个小问题。 我有以下表格:

  • 成员;
  • 组;
  • member_has_group(这个有列 id_group 指的是组 id,id_member 指的是成员 id)

我正在尝试进行查询,为我提供所选组的成员。你能帮帮我吗?

我不熟悉连接表,但对于我所做的搜索,我认为这可能是解决方案之一。

提前致谢。

埃尔卡斯

【问题讨论】:

    标签: php mysql codeigniter join


    【解决方案1】:

    是的,你需要在这里加入。

    SELECT *
    FROM `member` 
    JOIN `group` ON member.id = group.id
    JOIN `member_has_group` ON group.id = member_has_group.id
    

    根据您表中的信息,您可能根本不需要第三个表。您只需要一个连接器表,并且您之间具有“多对多”关系。

    (如果您已经知道,请忽略其余部分 关于数据库规范化)

    例如,如果您有两个表,Authors 和 Books。作者将包含诸如姓名、出版商、生日等字段,无论是“作者”的属性。书籍将包含相关的“书籍”信息。这是一种“一对多”的关系。一个作者可以(通过 author_id 等字段)链接到几本书,但一本书只能有一个作者。这里不需要第三张桌子。

    在此基础上,假设您有第三个“角色名称”表。这将是“书籍”表中任何书籍中使用的主要角色名称列表。其中一个角色恰好名叫约翰斯蒂尔。约翰有一整套关于他的书。在 Books 表中,有几本书可能将 John Steele 列为角色。在字符表中,约翰斯蒂尔可以在几本书中列出。这是“多对多”。这里需要第三张桌子。它只有两个字段。 book_idcharacter_id,John Steele 出现的每一本书都有一个条目。

    MySql Manual on DB Normalization

    【讨论】:

    • 感谢朋友的解释。我熟悉规范化,但不熟悉某些查询。但感谢你刷新我的记忆 =)
    【解决方案2】:

    如果你知道组 id

    select member.* from member m
      inner join member_has_group mg on m.id = mg.id_member
    where mg.id_group = [x]
    

    如果你只知道组名

    select member.* from member m
      inner join member_has_group mg on m.id = mg.id_member
      inner join group g on g.id = mg.id_group
    where g.name = 'group name'
    

    【讨论】:

      【解决方案3】:

      这在 SQL 中很简单:

      SELECT m.id_member, m.name
      FROM member AS m
      INNER JOIN member_has_group AS h ON (m.id_member=h.id_member)
      WHERE (h.id_group=@my_id_group)
      

      @my_id_group 是您必须提供的组 ID。

      【讨论】:

      • 谢谢队友=)你的解决方案工作正常=)经过一番思考,答案很明显=(对不起打扰你了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多