sql >> Database teknologi >  >> RDS >> Mysql

Hvordan genererer man en trævisning fra dette resultatsæt baseret på trægennemløbsalgoritme?

Når du bygger den indlejrede træmodel, må du aldrig lave dubletter på lft og rgt . Faktisk bør du erklære dem unikke.

I din datamodel er sætene for kategori 1 og 8 overlap. Sig 1 til 14 bruges både til elementer 1 og 8 .

Erstat dem med disse værdier:

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);

Nu behøver du ikke bestille på root_id .

Ingen nem måde, medmindre du indsætter noderne i navnerækkefølgen fra begyndelsen. Søskende med det større name skal have større lft og 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);

Et indlejret træ kan kun have én implicit rækkefølge.

Der er også en måde at forespørge på tilgrænsende liste i MySQL :

, men du bliver nødt til at oprette en ekstra unik bestillingskolonne, hvis du vil bestille på andet end id .

Du kan også læse denne artikel:

som viser, hvordan man gemmer og forespørger indlejrede sæt mere effektivt.



  1. Kunne ikke opgradere SonarQube fra 4.5.2 til 5.0

  2. Hvordan sletter man fra udvalg i MySQL?

  3. 3 måder at få dagens navn fra en dato i MariaDB

  4. Henter MySQL med Kivy