2
我有一个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中执行SELECT NAME CATEGORYID <= p_CategoryId;并将结果写入临时表,然后使用临时表上的WHILE循环来连接名称。或者你可以使用游标来连接名字。 –