从mysql数据库中的同一个表打印父层次结构

时间:2016-07-04 07:39:33

标签: mysql sql self-join

我有一个表类别,其字段和值如下所示在MYSQL数据库中。

id  name   parent    sort_order
1   Men    null       0
2   Women  null       1
3   shirt   1         0
4   salwar  2          1

这里parent是指向同一个表的外键。在我的类别列表页面中,我想打印父层次结构(如果有)以及类别名称。我可以在一个查询中执行此操作。  我在mysql中尝试使用group_concat但无法生成所需的结果。

Expected Result:

1   men
2.  women
3.  men>shirt
4.  women> salwar

1 个答案:

答案 0 :(得分:1)

您可以使用自我加入:

SELECT *
FROM
(
    SELECT name, 1 AS rank, sort_order
    FROM category
    WHERE parent IS NULL
    UNION ALL
    SELECT CONCAT(c1.name,
        CASE WHEN c2.parent IS NOT NULL THEN CONCAT('>', c2.name) ELSE '' END), 0 AS rank, c1.sort_order
    FROM category c1 LEFT JOIN category c2
        ON c1.id = c2.parent
    WHERE c1.parent IS NULL
) t
ORDER BY t.rank DESC, t.sort_order

SQLFiddle