2009-10-02 30 views
0

我正在使用MPTT(修改的預定義樹遍歷)模型來將分層數據存儲在我的MySQL表中。 (MPTT型號:另一種說明是嵌套型號。)。我的問題是這樣的:有沒有人想出了一個巧妙的方法來排序樹上的查詢結果?我可以去'ORDER BY label',但是結果集將按照標籤進行排序,而不考慮節點在樹中的位置或深度。對MPTT結果集中的項目進行排序?

這裏是我的查詢用來檢索任意節點的樹,每個節點的深度的例子:

SELECT node.id, (COUNT(parent.id) - (sub_tree.depth + 1)) AS depth 
FROM person AS node, 
person AS parent, 
person AS sub_parent, (
    SELECT node.id, (COUNT(parent.id) - 1) AS depth 
    FROM person AS node, 
    person AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.id = 1 // that's my root object 
    GROUP BY node.id, node.lft 
    ORDER BY node.lft 
) AS sub_tree 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt 
AND sub_parent.id = sub_tree.id 
GROUP BY node.id 
ORDER BY node.lft 

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

當然,這總是按照它們在嵌套集合中的位置來排序項目。如果我想通過比如'lastName'或'accountBalance'或'town'來訂購它們,該怎麼辦?這可以在MySQL中完成,或者你認爲我不得不求助於使用腳本語言對結果進行排序嗎?

回答

0

恕我直言,有一個MPTT樹我總是按lft(從左到右)排序。樹就是這樣。如果你按其他領域排序,那麼它不是真正的等級。

+0

我知道,我知道......只是如果它是一組可以在邏輯上排序的信息(例如客戶名稱列表),那麼閱讀器篩選就會變得很難和難。 – 2010-01-28 16:35:29

相關問題