sql >> Database teknologi >  >> RDS >> Mysql

Beregn dybde i en forældre-barn-model i MySQL

Det afhænger af den faktiske implementering af dit hierarki i databasen. Hvis du bruger indlejrede sæt-modeller ( http://mikehillyer.com/articles/managing-hierarchical-data- i-mysql/ ) kan du hente hele forældre-til-barn-stien via et enkelt valg.

Opdater :Ok, da du går med tilstødende listemodel foreslår jeg at gemme nodeniveau i tabellen. Det vil ikke kun give dig nodedybden i én forespørgsel, men det vil også give dig mulighed for at hente hele stien til noden i én forespørgsel (omend den forespørgsel skulle genereres dynamisk):

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;

Da du ved, at din node er på niveau N, er der ikke behov for venstre joins, og givet passende indekser på id / parent_id burde dette være rimeligt hurtigt.
Ulempen ved denne tilgang er, at du bliver nødt til at holde nodeniveau opdateret under nodebevægelser, men det burde være rimeligt ligetil og hurtigt, da du kun ville gøre det for selve noden og dens børn - ikke for størstedelen af ​​tabellen, som du ville gøre med indlejrede sæt.



  1. Sådan ser du hele forespørgslen fra VIS PROCESLISTE

  2. SQL OPDATERING med LIKE

  3. OpenSSL - fejl 18 ved 0 dybdeopslag:selvsigneret certifikat

  4. Sådan slipper du en begrænsning i SQL Server (T-SQL)