2015-10-11 38 views
0

我在下面的架構一堆數據的:如何在MySql樹結構化數據中查找到根的距離?

Id | category | remote_id 
------------------------- 

如果remote_id引用了另一個ID在同一個表。

我該如何查詢這個,以便對於每個記錄,我可以找到與定義爲Id和remote_id相同的行的根元素的距離?

這個數據只有一個根。

這可以純粹通過SQL來完成,而無需修改此架構?或者是否有必要將內存中的數據導入某個服務器端應用程序,並像傳統樹一樣對其進行建模?

回答

0

像這樣的過程應該工作,雖然我沒有測試它:

CREATE PROCEDURE getDistanceToRoot 
(
id INT 
) 
BEGIN 
    DECLARE distance INT DEFAULT 0; 
    DECLARE parentId INT DEFAULT NULL; 
    SET parentId = (SELECT remoteid from table where id = id); 
    WHILE (id != parentId) DO 
    SET count = count + getDistanceToRoot(parentId); 
    SET parentId = (SELECT remoteid from table where id = parentId); 
END WHILE; 
    SELECT distance; 
END; 

這也將是緩慢的。作爲程序的一部分,您可以通過在獲取後將每個id的距離保存到不同的表格中來改善其性能(如我說過我沒有測試過)。

+0

我如何查看結果?如果我想將答案(距根的距離)追加到每行的新列,該怎麼辦?現在我在這裏得到一個錯誤,說子查詢返回多於一行。 –

+0

另外應該提到數據的分支因子是不固定的。 –

+0

這個程序絕對不行。這個想法可以作爲一個程序或功能,但不能作爲一個混合體。 –