2011-11-22 82 views
0

按照article的说明,我想获得一个完整的树,每个类别的深度都能正常工作。在一个查询中嵌套集合,产品数量和类别深度

我也想获得每个类别的产品数量。我尝试添加另一个COUNT(products_categories.product_id),但它与深度值混淆了。如何修改查询以获得每个类别的产品数量和深度?

products_categories 
---------------------- 
category_id 
product_id 


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 
GROUP BY node.name 
ORDER BY node.lft 

换句话说,我想结合这两个查询。

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 
GROUP BY node.name 
ORDER BY node.lft 

SELECT parent.name, COUNT(product.name) 
FROM nested_category AS node , 
    nested_category AS parent, 
    product 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.category_id = product.category_id 
GROUP BY parent.name 
ORDER BY node.lft; 
+0

你的问题需要改进,我还是不完全明白你需要什么。 –

+0

我编辑了我的问题。请检查。 – Khronos

回答

1

我终于解决了我的问题。我将上述查询结合起来,以便我可以像这样获得深度和产品数量。

SELECT parent.id, 
        parent.lft, 
        parent.rgt, 
        (SELECT COUNT(parent2.id) FROM businesscategories AS parent2 WHERE parent.lft > parent2.lft AND parent.rgt < parent2.rgt) AS depth, 
        COUNT(b_c.business_id) AS bcount 

       FROM businesscategories AS node, 
       businesscategories AS parent, 
       businesses_categories AS b_c, 
       WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.id = b_c.category_id 
       GROUP BY parent.id having depth > 0 
       ORDER BY parent.lft 
+0

+1灵感来解决我的问题,通过减少这部分时间执行“(SELECT COUNT(parent2.id)..)” –

相关问题