sql >> Databasteknik >  >> RDS >> Mysql

Hur genererar man en trädvy från denna resultatuppsättning baserat på Tree Traversal Algorithm?

När du bygger den kapslade trädmodellen, gör aldrig dubbletter på lft och rgt . Faktum är att du bör förklara dem unika.

I din datamodell, uppsättningarna för kategori 1 och 8 överlappning. Säg, 1 till 14 används båda för objekt 1 och 8 .

Ersätt dem med dessa värden:

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 inte beställa på root_id .

Inget enkelt sätt, om du inte sätter in noderna i namnordningen från början. Syskon med det större name bör ha större lft och 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);

Ett kapslat träd kan bara ha en implicit ordning.

Det finns också ett sätt att fråga efter granskningslistan i MySQL :

, dock måste du skapa ytterligare en unik beställningskolumn om du vill beställa på något annat än id .

Du kanske också vill läsa den här artikeln:

som visar hur man lagrar och efterfrågar kapslade uppsättningar mer effektivt.



  1. Hur man skickar villkorssatser till en mySql-fråga

  2. Skicka en applikation med en databas

  3. Lägg till en numrerad listkolumn till en returnerad MySQL-fråga

  4. Hur ställer man in miljövariabeln PYTHON_EGG_CACHE på Mac?