2013-04-09 32 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