2009-09-18 47 views
1

这里是我的发言:如何检索没有这些孩子的儿童类别?

SELECT (
    COUNT(parent.categoryName) - (sub_tree.depth +1)) AS depth, 
    CONCAT(REPEAT('', (COUNT(parent.categoryName) - (sub_tree.depth +1))) , node.categoryName) AS categoryName 

FROM 
    Categories AS node, 
    Categories AS parent, 
    Categories AS sub_parent, 
(
    SELECT node.categoryName, (
    COUNT(parent.categoryName) -1) AS depth 
    FROM 
     Categories AS node, 
     Categories AS parent 
    WHERE 
     node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt 
    AND node.categoryName LIKE 'Product' 

    GROUP BY node.categoryName 
    ORDER BY node.categoryLft 
) AS sub_tree 
WHERE 
    node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt 
AND node.categoryLft BETWEEN sub_parent.categoryLft AND sub_parent.categoryRgt 
AND sub_parent.categoryName = sub_tree.categoryName 

GROUP BY node.categoryName 
ORDER BY node.categoryLft 

它的伟大工程,但我本来希望修改只得到第一个节点旁边的选择的类别(在此“产品”),而子类的孩子

像: 产品:

  • 类型A

    • SubTypeA

    • SubTypeB

  • 的TypeB

我想 '类型A', '类型B'。

顺便说一句,这里是我的表:您正在使用

CREATE TABLE `Categories` (
`categoryId` int(11) NOT NULL auto_increment, 
`categoryLft` int(11) NOT NULL, 
`categoryRgt` int(11) NOT NULL, 
`categoryName` varchar(255) default NULL, 
`categoryAlias` varchar(255) default NULL, 
PRIMARY KEY (`categoryId`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 
+0

只是一个问题,是否真的需要创建这样一个复杂的分类机制?如果不是,我可以为每个任务类别表和查询提供一个简单且足够的信息。 – 2009-09-18 16:06:11

+0

它会被用来对任何类型的东西进行分类,我对这些类别的外观没有任何想法,我只有一个规则“一个类别可以有多个子类别”。 它将用于独立于分类对象集中类别。 (它可以用户,文章,产品等...) 但我仍然愿意接受任何新的好主意...... – 2009-09-19 10:54:30

回答

1
SELECT child.* 
FROM categories parent 
JOIN categories child 
ON  child.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt 
WHERE parent.id = @id_of_products 
     AND NOT EXISTS 
     (
     SELECT NULL 
     FROM categories grandchild 
     WHERE grandchild.categoryLft BETWEEN child.categoryLft AND child.categoryRgt 
     ) 

Nested sets模型非常难以管理。

您可能需要阅读这篇文章在我的博客:

介绍如何在MySQL实现一个更简单的adjacency list模型。