Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnen Sie die Tiefe in einem Eltern-Kind-Modell in MySQL

Das hängt von der tatsächlichen Implementierung Ihrer Hierarchie in der Datenbank ab. Wenn Sie das Modell mit verschachtelten Sätzen verwenden ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) können Sie den vollständigen Eltern-zu-Kind-Pfad über eine einzige Auswahl abrufen.

Aktualisieren :Ok, da Sie mit dem Adjazenzlistenmodell arbeiten, schlage ich vor, die Knotenebene in der Tabelle zu speichern. Es gibt Ihnen nicht nur die Knotentiefe in einer Abfrage, sondern ermöglicht Ihnen auch, den gesamten Pfad zu diesem Knoten in einer Abfrage abzurufen (obwohl diese Abfrage dynamisch generiert werden müsste):

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 Sie wissen, dass sich Ihr Knoten auf Ebene N befindet, sind Linksverknüpfungen nicht erforderlich, und bei entsprechenden Indizes auf id / parent_id sollte dies ziemlich schnell sein.
Der Nachteil dieses Ansatzes ist, dass Sie die Knotenebene beibehalten müssen während Knotenbewegungen aktualisiert werden, aber das sollte ziemlich einfach und schnell sein, da Sie es nur für den Knoten selbst und seine Kinder tun würden - nicht für den Großteil der Tabelle, wie Sie es mit verschachtelten Sätzen tun würden.