2013-02-14 63 views
0

以下SQL代码工作正常,但无法选择/过滤类别。带来所有类别。按子节点过滤产品数

举个例子,

Cars (20) (root) 
---> Blue cars (12) 
----------> Ford (2) 
----------> Bmw (9) 
----------> Dodge (1) 
---> Red cars (9) 
----------> Xxxx (9) 
---> Black cars (1) 
----------> Yy (1) 

如何选择只有蓝色轿车的范畴。 (与子节点)

如何更改此代码的SQL代码可以完成?

我想要的结果如下。 (如果我选择一辆蓝色轿车类)

---> blue cars (12) 
----------> ford (2) 
----------> bmw (9) 
----------> dodge (1) 

这是SQL代码...

SELECT 
parent.cid, 
parent.title, 
(SELECT COUNT(parent2.cid) FROM categories AS parent2 WHERE parent.lft > parent2.lft AND parent.rgt < parent2.rgt) AS depth, 
COUNT(products.cat_id) AS total 

FROM categories AS node, 
categories AS parent, 
products 

WHERE 

node.lft BETWEEN parent.lft AND parent.rgt 

AND node.cid = products.cat_id 

GROUP BY parent.cid having depth <= 5 
ORDER BY parent.lft 
+0

你是如何保存你的heirachy? - 看到你的选择这个问题http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database – 2013-02-14 23:02:02

+0

嵌套集模型 – 2013-02-14 23:08:12

+0

我认为所有你需要做的是添加'AND node.cid ='(无论cid是蓝色汽车的ID) – cha 2013-02-15 00:38:50

回答

0

我觉得你一直在这得太多 - 让子树是关于嵌套集合

的simplist操作
SELECT * 
FROM categories 
WHERE lft BETWEEN bluecarleftvalue AND bluecarrightvalue 
ORDER BY lft ASC 
+0

基本上是的。但我需要计数产品。 – 2013-02-15 10:56:27

+0

类别和产品之间的链接是什么? – 2013-02-15 20:22:39