我試圖來管理節點的檢索在nested set model表,而不是通過唯一的ID,但通過名稱(串),和不同父母下的樹內的其他節點可以被調用相同的方式。選擇在嵌套集模型的節點通過未唯一的名稱
至於現在,我使用的唯一的ID來獲得嵌套組內的節點:
SELECT
node.name, node.lft, node.rgt
FROM tbl AS parent, tbl AS node
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = '{$node_id}'
GROUP BY node.id
嘗試此方法擴展到更一般的方法來檢索通過其名稱的節點,我想出了含有多達HAVING子句爲節點的深度查詢檢索,檢查節點名稱和它的深度:
SELECT
node.name, node.lft, node.rgt, COUNT(node.id) AS depth
FROM tbl AS parent, tbl AS node
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.id
HAVING
(node.name = 'myParentName' AND depth = 1)
OR
(node.name = 'myParent2Name' AND depth = 2)
OR
...
# and so on
但它並非十全十美:具有相同的名稱和相同深度的兩個節點,但是在不同的父母身上,無論是否等級高,都可以被檢索出來他們屬於。
實施例:
ARTICLES | +--PHP | +--the-origins | +--syntax +--JS +--history +--syntax
在這種情況下,上面的查詢將返回任一文章/ PHP /語法或製品/ JS /語法:具有深度3,事實上一「語法」節點,或者是下PHP節點或JS節點下。 有沒有一條有效的路徑來解決這個問題?
因此,您正在輸入例如'PHP'和'語法'及其各自的深度,並且您希望他們的路徑位於頂部?或者,如果情況並非如此,那麼您需要什麼確切的輸入和輸出? – Wrikken 2010-09-27 20:06:55
是的Wrikken,我正在努力做到這一點。我會從給定的路徑深度。 – 2010-09-27 21:11:11