Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie generiert man eine Baumansicht aus dieser Ergebnismenge basierend auf dem Tree Traversal Algorithm?

Erstellen Sie beim Erstellen des verschachtelten Baummodells niemals Duplikate auf lft und rgt . Sie sollten sie sogar eindeutig deklarieren.

In Ihrem Datenmodell die Sets für die Kategorie 1 und 8 Überlappung. Sagen Sie 1 bis 14 werden beide für Artikel 1 verwendet und 8 .

Ersetzen Sie sie durch diese Werte:

INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 4, 9);
INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 5, 6);
INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 7, 8);
INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 10, 11);
INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 12, 13);
INSERT INTO `categories` VALUES(8, NULL, NULL, 'Eletronics', 15, 29);
INSERT INTO `categories` VALUES(9, 8, 8, 'Cell Phones', 16, 17);
INSERT INTO `categories` VALUES(10, 8, 8, 'Computers', 19, 24);
INSERT INTO `categories` VALUES(11, 10, 8, 'PC', 20, 21);
INSERT INTO `categories` VALUES(12, 10, 8, 'MAC', 22, 23);
INSERT INTO `categories` VALUES(13, 8, 8, 'Printers', 25, 26);
INSERT INTO `categories` VALUES(14, 8, 8, 'Cameras', 27, 28);

Jetzt müssen Sie nicht mehr auf root_id bestellen .

Kein einfacher Weg, es sei denn, Sie fügen die Knoten von Anfang an in der Reihenfolge der Namen ein. Geschwister mit dem größeren name sollte ein größeres lft haben und rgt :

INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 4, 5);
INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 6, 11);
INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 7, 8);
INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 9, 10);
INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 12, 13);

Ein verschachtelter Baum kann nur eine implizite Reihenfolge haben.

Es gibt auch eine Möglichkeit, Adjazenzlisten in MySQL abzufragen :

, müssen Sie jedoch eine zusätzliche eindeutige Bestellspalte erstellen, wenn Sie etwas anderes als id bestellen möchten .

Vielleicht möchten Sie auch diesen Artikel lesen:

die zeigt, wie verschachtelte Sätze effizienter gespeichert und abgefragt werden können.