Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да генерирам дървовиден изглед от този набор от резултати въз основа на алгоритъма за обхождане на дърво?

Когато създавате вложен модел на дърво, никога не правете дубликати на lft и rgt . Всъщност трябва да ги обявите за уникални.

Във вашия модел на данни, наборите за категория 1 и 8 припокриване. Кажете, 1 до 14 се използват и за елементи 1 и 8 .

Заменете ги със следните стойности:

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

Сега не е нужно да поръчвате на root_id .

Няма лесен начин, освен ако не вмъкнете възлите в реда на имената от самото начало. Братя и сестри с по-голямо name трябва да има по-голям lft и 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);

Вложеното дърво може да има само един имплицитен ред.

Има също така начин за запитване на списък за съседство в MySQL :

, обаче, ще трябва да създадете допълнителна уникална колона за поръчка, ако искате да поръчате за нещо друго освен id .

Може да искате да прочетете и тази статия:

което показва как да съхранявате и заявявате по-ефективно вложени набори.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO SHOW TABLES масив

  2. MySQL:Как да групирате SELECT редове с множество двойки в клауза WHERE

  3. MySQL заявка, където JOIN зависи от CASE

  4. Кеширане на MySQL заявки:ограничено до максимален размер на кеша от 128 MB?

  5. org.hibernate.InstantiationException:Няма конструктор по подразбиране за обект::principal.Cliente