sql >> Database >  >> RDS >> Mysql

Bereken diepte in een ouder-kindmodel in MySQL

Dat hangt af van de daadwerkelijke implementatie van uw hiërarchie in de database. Als u geneste sets gebruikt ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) kunt u het volledige ouder-naar-kind-pad ophalen via een enkele selectie.

Bijwerken :Ok, aangezien je met een aangrenzend lijstmodel gaat, raad ik aan om het knooppuntniveau in de tabel op te slaan. Het geeft u niet alleen de knooppuntdiepte in één query, maar u kunt ook het volledige pad naar dat knooppunt in één query ophalen (hoewel die query dynamisch moet worden gegenereerd):

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;

Aangezien je weet dat je node zich op niveau N bevindt, zijn er geen left joins nodig en gezien de juiste indexen op id / parent_id zou dit redelijk snel moeten zijn.
Het nadeel van deze aanpak is dat je node-niveau moet houden bijgewerkt tijdens knooppuntverplaatsingen, maar dat zou redelijk eenvoudig en snel moeten zijn, aangezien u het alleen voor het knooppunt zelf en zijn kinderen zou doen - niet voor het grootste deel van de tabel zoals u zou doen met geneste sets.



  1. Algemene Postgres-taken op CentOS 7

  2. Hoe kan ik verbinding maken met een externe database vanuit een SQL-instructie of een opgeslagen procedure?

  3. Hoe Microsoft SQL Server-fout 926 te repareren? - Opgelost

  4. Hoe lid te worden van drie tabellen in Codeigniter