【发布时间】:2017-10-29 04:20:57
【问题描述】:
我有一个这样的 MySQL 表:
| CategoryId | Name | CategoryParentId |
|------------|---------------|------------------|
| 0 | Tech Support | (null) |
| 1 | Configuration | 0 |
| 2 | Questions | 1 |
| 3 | Sales | (null) |
| 4 | Questions | 3 |
| 5 | Other | (null) |
这是我在查询 ID 2 时想要的输出(例如):
技术支持/配置/问题
如何在不进行多次连接的情况下做到这一点?
编辑:不确定是否是最好的方法,但我通过创建一个函数来解决:
DELIMITER $$
CREATE FUNCTION get_full_tree (CategoryId int) RETURNS VARCHAR(200)
BEGIN
SET @CategoryParentId = (SELECT CategoryParentId FROM category c WHERE c.CategoryId = CategoryId);
SET @Tree = (SELECT Name FROM category c WHERE c.CategoryId = CategoryId);
WHILE (@CategoryParentId IS NOT NULL) DO
SET @ParentName = (SELECT Name FROM category c WHERE c.CategoryId = @CategoryParentId);
SET @Tree = CONCAT(@ParentName, '/', @Tree);
SET @CategoryParentId = (SELECT CategoryParentId FROM category c WHERE c.CategoryId = @CategoryParentId);
END WHILE;
RETURN @Tree;
END $$
DELIMITER ;
我现在可以做这个查询了:
SELECT CategoryId, get_full_tree(CategoryId) FROM category
【问题讨论】:
-
不确定是否可以在一行中完成。您可以从 MYTABLE 中选择名称,其中 CATEGORYID
标签: mysql recursion tree hierarchical