2009-09-18 77 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模型。