Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wygenerować widok drzewa z tego zestawu wyników na podstawie algorytmu przechodzenia przez drzewo?

Budując zagnieżdżony model drzewa, nigdy nie rób duplikatów na lft i rgt . W rzeczywistości powinieneś zadeklarować je jako unikalne.

W Twoim modelu danych zestawy dla kategorii 1 i 8 zachodzić na siebie. Powiedz, 1 do 14 są używane zarówno dla pozycji 1 i 8 .

Zastąp je następującymi wartościami:

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

Teraz nie musisz zamawiać na root_id .

Nie ma łatwego sposobu, chyba że wstawisz węzły w kolejności nazw od początku. Rodzeństwo z większym name powinien mieć większy lft i 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);

Drzewo zagnieżdżone może mieć tylko jedną niejawną kolejność.

Istnieje również sposób na zapytanie o listę sąsiedztwa w MySQL :

, jednak będziesz musiał utworzyć dodatkową unikalną kolumnę zamawiania, jeśli chcesz zamówić coś innego niż id .

Możesz również przeczytać ten artykuł:

który pokazuje, jak efektywniej przechowywać i wyszukiwać zagnieżdżone zestawy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zarządzać uprawnieniami za pomocą ról w MySQL

  2. Przewodnik po zrozumieniu wzorców skalowania bazy danych

  3. usuń zduplikowane wiersze na podstawie wartości jednej kolumny

  4. Jak skopiować wiersz i wstawić do tej samej tabeli z polem autoinkrementacji w MySQL?

  5. Zwiększanie wartości MySQL