【发布时间】:2011-07-26 03:11:43
【问题描述】:
我在 MySQL 中进行查询时遇到了一个小问题。 我有以下表格:
- 成员;
- 组;
- member_has_group(这个有列 id_group 指的是组 id,id_member 指的是成员 id)
我正在尝试进行查询,为我提供所选组的成员。你能帮帮我吗?
我不熟悉连接表,但对于我所做的搜索,我认为这可能是解决方案之一。
提前致谢。
埃尔卡斯
【问题讨论】:
标签: php mysql codeigniter join
我在 MySQL 中进行查询时遇到了一个小问题。 我有以下表格:
我正在尝试进行查询,为我提供所选组的成员。你能帮帮我吗?
我不熟悉连接表,但对于我所做的搜索,我认为这可能是解决方案之一。
提前致谢。
埃尔卡斯
【问题讨论】:
标签: php mysql codeigniter join
是的,你需要在这里加入。
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_id 和 character_id,John Steele 出现的每一本书都有一个条目。
【讨论】:
如果你知道组 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'
【讨论】:
这在 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。
【讨论】: