代码之家  ›  专栏  ›  技术社区  ›  Boris Guéry

如何在没有子类别的情况下检索子类别?

  •  1
  • Boris Guéry  · 技术社区  · 17 年前

    以下是我的声明:

    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型

      • 亚型

    • B型

    我想要“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
    
    1 回复  |  直到 17 年前
        1
  •  1
  •   Quassnoi    17 年前
    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 非常

    您可能想在我的博客中阅读这篇文章:

    adjacency list 模仿 .