sql >> Databasteknik >  >> RDS >> Mysql

Beräkna djupet i en föräldra-barn-modell i MySQL

Det beror på den faktiska implementeringen av din hierarki i databasen. Om du använder en kapslad uppsättningsmodell ( http://mikehillyer.com/articles/managing-hierarchical-data- i-mysql/ ) kan du hämta hela förälder-till-barn-sökvägen via ett enda val.

Uppdatera :Ok, eftersom du använder en lista med närliggande list föreslår jag att du lagrar nodnivå i tabellen. Det kommer inte bara att ge dig noddjupet i en fråga, utan det kommer också att tillåta dig att hämta hela sökvägen till den noden i en fråga (även om den frågan måste genereras dynamiskt):

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;

Eftersom du vet att din nod är på nivå N finns det inget behov av vänsterkopplingar och givet lämpliga index på id / parent_id borde detta vara ganska snabbt.
Nackdelen med detta tillvägagångssätt är att du måste hålla nodnivån uppdateras under nodrörelser, men det borde vara ganska enkelt och snabbt eftersom du bara skulle göra det för själva noden och dess underordnade - inte för majoriteten av tabellen som du skulle göra med kapslade uppsättningar.



  1. Varning:mysqli_query() förväntar sig att parameter 1 är mysqli boolean given

  2. Hur man vet hur många mysql-rader uppdaterade

  3. SUMMA av belopp med dollartecken

  4. En rapports egenskaper