2011-09-28 31 views
3

我使用嵌套集模型与MySQL创建分层树模型。嵌套组型号:查询节点孩子的只有1级以下和所有的父母上述

我成功设法节点及以下所有的童车1级(​​我需要只有1分级别)

不过,我想不仅所有童车1以下水平,但所有父母也超过该节点。

是否有可能修改当前查询得到我想要的东西?

这是我的代码(实际上其从此,非工作,现场拍摄:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,但我的是完全一样的):

SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth 
FROM nested_category AS node, 
nested_category AS parent, 
nested_category AS sub_parent, 
(
    SELECT node.name, (COUNT(parent.name) - 1) AS depth 
    FROM nested_category AS node, 
    nested_category AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.name = 'PORTABLE ELECTRONICS' 
    GROUP BY node.name 
    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.name = sub_tree.name 
GROUP BY node.name 
HAVING depth <= 1 
ORDER BY node.lft; 

树结构如下:

Electronics 
--Televisions 
----LCD 
--Portable Electronics 
----MP3 Players 
------Flash 
----CD Players 

使用上面我当前的代码,我得到这个:

--Portable Electronics 
----MP3 Players 

但我需要得到像THI S:

Electronics 
--Portable Electronics 
----MP3 Players 

我将在以后使用此查询在PHP中,这样我就可以使用基于PHP的解决方案(或部分)了。

谢谢

回答

0

我想你想在多个查询拆分此了。首先是所有孩子的'PORTABLE ELECTRONICS'项目,就像你现在所做的那样。之后,取父母很容易,只需取所有元素WHERE left < [PE-left] AND right > [PE-right]

+0

但我怎么加入他们的行列呢? SQL UNION?试过,但没有成功..可能有人有一些例子。谢谢。 – Andrew

0

我设法通过使用多个查询来解决问题。

首先查询检索以上节点的所有的父母(如Rijk的建议)和第二查询检索节点(代码张贴在原来的职位)下的所有内容。然后使用UNION ALL将所有内容组合成一个结果集。

但是我不能使用深度列进行缩进了,所以使页面格式化为孩子的,我使用的基于php的功能,缩进节点(http://www.sitepoint.com/hierarchical-data-database-2/

注:我不得不添加if/else语句在这段代码的末尾只缩进父节点而不是所有东西。

0

我有同样的问题。这似乎工作。

SELECT parent.name 
FROM nested_category AS node,nested_category AS parent,nested_category AS midpoint 
WHERE (node.lft BETWEEN parent.lft AND parent.rgt) AND (node.lft BETWEEN midpoint.lft AND midpoint.rgt) AND midpoint.name='PORTABLE ELECTRONICS' 
GROUP BY parent.name 
ORDER BY node.lft; 
相关问题