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

Vypočítejte hloubku v modelu rodič-dítě v MySQL

To závisí na skutečné implementaci vaší hierarchie v databázi. Pokud používáte model vnořených sad ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) můžete načíst úplnou cestu rodiče k potomkovi jediným výběrem.

Aktualizovat :Dobře, protože používáte model seznamu sousedství, doporučuji uložit úroveň uzlů do tabulky. Nejen, že vám poskytne hloubku uzlu v jednom dotazu, ale také vám umožní získat celou cestu k tomuto uzlu v jednom dotazu (ačkoli by tento dotaz musel být generován dynamicky):

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;

Vzhledem k tomu, že víte, že váš uzel je na úrovni N, není potřeba levá spojení a vzhledem k příslušným indexům na id / parent_id by to mělo být přiměřeně rychlé.
Nevýhodou tohoto přístupu je, že budete muset udržovat úroveň uzlu aktualizováno během přesunů uzlů, ale mělo by to být přiměřeně přímočaré a rychlé, protože byste to dělali pouze pro samotný uzel a jeho potomky – nikoli pro většinu tabulky, jak byste to dělali u vnořených sad.



  1. Jak odstranit duplicitní záznamy?

  2. Aritmetika sloupce data v dotazu PostgreSQL

  3. proč rozdělujeme mysql tabulku na mnoho menších tabulek?

  4. Jak funguje WEEKDAY() v MariaDB