sql >> Databáze >  >> RDS >> Mysql

Jak vygenerovat stromové zobrazení z této sady výsledků založené na algoritmu Tree Traversal Algorithm?

Při vytváření modelu vnořeného stromu nikdy nevytvářejte duplikáty na lft a rgt . Ve skutečnosti byste je měli prohlásit za jedinečné.

Ve vašem datovém modelu sady pro kategorii 1 a 8 překrytí. Řekněme 1 do 14 se používají jak pro položky 1 a 8 .

Nahraďte je těmito hodnotami:

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

Nyní již nemusíte objednávat na root_id .

Není to snadný způsob, pokud nevložíte uzly v pořadí jmen od začátku. Sourozenci s větším name by měl mít větší lft a 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);

Vnořený strom může mít pouze jedno implicitní pořadí.

Existuje také způsob dotazování na seznam sousedství v MySQL :

, ale budete muset vytvořit další jedinečný objednávkový sloupec, pokud chcete objednávat na cokoliv jiného než id .

Můžete si také přečíst tento článek:

který ukazuje, jak efektivněji ukládat a dotazovat vnořené sady.



  1. Jak odstranit velká data tabulky v SQL bez protokolu?

  2. Chcete číslo řádku ve skupině sloupců v MY SQL?

  3. Převést „datetimeoffset“ na „smalldatetime“ v SQL Server (příklady T-SQL)

  4. SQL – Převod datového typu varchar na datový typ datetime vedl k hodnotě mimo rozsah