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

Изчислете дълбочината в модел родител-дете в MySQL

Това зависи от действителното изпълнение на вашата йерархия в базата данни. Ако използвате модел на вложени набори ( http://mikehillyer.com/articles/managing-hierarchical-data- в-mysql/ ) можете да извлечете пълния път от родител до дете чрез един избор.

Актуализиране :Добре, тъй като ще използвате модел на списък на съседство, предлагам да съхраните нивото на възел в таблицата. Той не само ще ви даде дълбочината на възела в една заявка, но също така ще ви позволи да извлечете целия път до този възел в една заявка (въпреки че тази заявка трябва да бъде генерирана динамично):

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;

Тъй като знаете, че вашият възел е на ниво N, няма нужда от леви съединения и, като се имат предвид подходящи индекси на id / parent_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. JDBC дава на MySQL дата и час в UTC

  2. MySQL GROUP BY с предпочитание

  3. дясното съединение е равно на лявото присъединяване?

  4. пренапишете URL адресите за името на продукта

  5. Разрешението е отказано при монтиране на том на Docker в OSX