Frage

Hier ist meine Aussage:

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

Es funktioniert großartig, aber ich hätte mir gewünscht, ihn zu ändern, nur die ersten Knoten erhalten neben der ausgewählten Kategorie (hier ‚Produkte‘), ohne dass die Kinder der Unterkategorien

Wie: Produkte:

  • TypeA

    • SubTypeA

    • SubTypeB

  • TypeB

Ich will get 'TypeA', 'TypeB'.

By the way, hier ist meine Tabelle:

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
War es hilfreich?

Lösung

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 Modell Sie verwenden, ist sehr schwer zu verwalten.

Sie möchten diese Artikel in meinem Blog lesen:

, die beschreibt, wie ein viel einfachere adjacency list Modell in MySQL implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top