我试图来管理节点的检索在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