2014-02-12 98 views
0

我有以下自引用表。注意:這個表格對於這個問題已經大大簡化了,這個表格中有成千上萬的行。MySQL自引用表,用組合字段在一行中顯示層次結構

TABLE_A 
-------------------------------- 
    ID  TABLE_A_ID  TITLE 
-------------------------------- 
    1   null  base_1 
    2   1   title_2 
    3   2   title_3 
    4   null  base_4 
    5   4   title_5 
    6   5   title_6 
    7   6   title_7  
    8   null  base_8 
    9   8   title_9 

我的情況是,我需要檢索行,但標題必須包含所有父行的細節,所以如果我試圖返回一行ID 3,7和9,我需要以下

----------------------------------- 
    ID  TITLE 
----------------------------------- 
    3  base_1, title_2, title_3 
    7  base_4, title_5, title_6, title_7 
    9  base_8, title_9 

我看了一下使用GROUP_CONCAT,但似乎不是正確的方法。有任何想法嗎?

+1

你需要寫一個存儲過程。 MySQL仍然不支持遞歸查詢 –

+0

很好,真的很有幫助。所以你說的是我需要編寫一些代碼來解決這個問題。 Genius –

+0

是(或升級到DBMS,這可以通過一個語句完成) –

回答

0

這可以通過編寫自定義函數來完成,該自定義函數通過提供的ID檢索/循環,直到它到達基礎並返回連接字符串。

Name: GetAllTitles 
Input: InputID 

Steps: `While ID <> null 
{ 
    select TABLE_A_ID,title from table where ID='InputID'; 
    If TABLE_A_ID is not null then, 
    { 
     // Save title to temp 
     // Save TABLE_A_ID to InputID 
     return CONCAT(temp,GetAllTitles(InputID)); 
    } 
    else { return emptystring; 
    } 
}` 

最終SQL查詢將是: 選擇ID,GetAllTitles(ID)從表A