MySQL自引用表,在一行中显示具有组合字段的层次结构

时间:2014-02-12 15:36:20

标签: mysql sql database

我有以下自引用表。注意:此表已针对此问题进行了大大简化,此表中有数千行。

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 个答案:

答案 0 :(得分: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查询将是: 从表A中选择ID,GetAllTitles(ID)