从 mysql 数据库中的相同 table 打印父层次结构
Print parent hierarchy from same table in mysql database
我有一个 table 类别,它在 MYSQL 数据库中具有如下所示的字段和值。
id name parent sort_order
1 Men null 0
2 Women null 1
3 shirt 1 0
4 salwar 2 1
这里parent是指向同一个table的外键。在我的类别列表页面中,我想打印父层次结构(如果有)以及类别名称。我可以在单个查询中执行此操作吗?
我已尝试在 mysql 中使用 group_concat
,但无法生成所需的结果。
Expected Result:
1 men
2. women
3. men>shirt
4. women> salwar
您可以使用自连接:
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
我有一个 table 类别,它在 MYSQL 数据库中具有如下所示的字段和值。
id name parent sort_order
1 Men null 0
2 Women null 1
3 shirt 1 0
4 salwar 2 1
这里parent是指向同一个table的外键。在我的类别列表页面中,我想打印父层次结构(如果有)以及类别名称。我可以在单个查询中执行此操作吗?
我已尝试在 mysql 中使用 group_concat
,但无法生成所需的结果。
Expected Result:
1 men
2. women
3. men>shirt
4. women> salwar
您可以使用自连接:
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