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

Oblicz głębokość w modelu rodzic-dziecko w MySQL

To zależy od rzeczywistej implementacji Twojej hierarchii w bazie danych. Jeśli używasz modelu zestawów zagnieżdżonych ( http://mikehillyer.com/articles/managing-hierarchical-data- w-mysql/ ) możesz pobrać pełną ścieżkę rodzic-dziecko za pomocą jednego wyboru.

Aktualizacja :Ok, ponieważ masz zamiar korzystać z modelu listy sąsiedztwa, sugeruję przechowywanie poziomu węzłów w tabeli. Nie tylko poda głębokość węzła w jednym zapytaniu, ale także pozwoli Ci pobrać całą ścieżkę do tego węzła w jednym zapytaniu (choć to zapytanie musiałoby być generowane dynamicznie):

SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
  FROM nodes AS n1
  JOIN nodes AS n2 ON n2.parent_id = n1.id
  JOIN nodes AS n3 ON n3.parent_id = n2.id
  ...
  JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;

Ponieważ wiesz, że Twój węzeł jest na poziomie N, nie ma potrzeby lewych złączeń, a biorąc pod uwagę odpowiednie indeksy w id / parent_id, powinno to być dość szybkie.
Wadą tego podejścia jest to, że będziesz musiał zachować poziom węzła aktualizowane podczas przenoszenia węzła, ale powinno to być dość proste i szybkie, ponieważ robisz to tylko dla samego węzła i jego dzieci – nie dla większości tabeli, jak w przypadku zestawów zagnieżdżonych.



  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 mogę przyspieszyć zapytanie MySQL z klauzulami WHERE w dwóch kolumnach?

  2. wybierz tytuł trafności na podstawie tagu podobnego do mysql

  3. Dołączanie i wykluczanie MySQL?

  4. Powolne zapytanie po aktualizacji mysql z 5,5 do 5,6

  5. Parsowanie bardzo dużych plików XML w php