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循環來連接名稱。或者你可以使用遊標來連接名字。 –