2013-04-09 83 views
1

我很好奇你认为是获得这个MySQL数据库工作的最好方法。SQL数据库为相关家庭成员

我有这个表:

family.id 
family.name 
family.related 

,并认为这不会是一个问题相关的家庭成员在1个查询连接在一起,这样的:

id  | name  | related 
1   | Name1  | 
2   | Name2  | 3,5 
3   | Name3  | 
4   | Name4  | 
5   | Name5  | 4,1 
6   | Name6  | 
7   | Name7  | 
8   | Name8  | 6 
9   | Name9  | 7 

所以名称2有关NAME3和NAME5 ,其中Name5有其他相关的ID,所以我应该查询以获得以下ID:

选择ID 2,输出相关的ID:3,5,4,1

选择ID 6,输出相关的ID:8

选择ID 9,输出相关的ID:7

但我不能找到一个查询来获取所有相关ID的一列。

这有可能吗?

+0

甲骨文有分层查询功能来做到这一点。我不知道是否有一个类似的构造为MySQL? – OldProgrammer 2013-04-09 19:35:18

+1

您想要在SQL表中表示层次结构。有一个很好的答案,描述,如何有效地:http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into -a-tree – user4035 2013-04-09 19:38:29

+0

我很抱歉,但我无法从答案中理解,请您帮助解释如何将其用于上面的数据库结构? – WHOMEZz 2013-04-09 19:59:43

回答

0

对于许多一对多的关系,您通常需要使用一个链接表:

family_id 
related_to 

在哪里,当你在你的家庭餐桌几个逗号分隔的项目,你反而会在链接表中为每个项目分配一个条目,这些条目将位于逗号分隔列表中:

family_id | related_to 
2   3 
2   5 
5   4 
5   1 
... 

依此类推。

+0

但是,当我选择family_id 5时,我如何获得family_id 2以及输出?如何查询查询,我可以在查询家庭表中的信息时在相同的查询中执行此操作吗?用JOIN例如? – WHOMEZz 2013-04-09 20:08:38

+0

有没有人能帮我解决这个问题? – WHOMEZz 2013-04-10 12:09:03

+0

您可以'SELECT * WHERE family_id = X OR related_to = X'。 – Adrian 2013-04-10 22:15:20