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

SQL-Baumhierarchie ordnen

Durch Hinzufügen einer Pfadspalte und eines Triggers kann dies ziemlich einfach durchgeführt werden.

Fügen Sie zuerst eine varchar-Spalte hinzu, die den Pfad vom Stamm zum Knoten enthält:

ALTER TABLE category ADD path VARCHAR(50) NULL;

Fügen Sie dann einen Trigger hinzu, der den Pfad beim Einfügen berechnet:

(Verknüpft einfach die neue ID mit dem Pfad des Elternteils)

CREATE TRIGGER set_path BEFORE INSERT ON category
  FOR EACH ROW SET NEW.path = 
  CONCAT(IFNULL((select path from category where id = NEW.parent_id), '0'), '.', New.id);

Wählen Sie dann einfach Sortieren nach Pfad:

SELECT name, path FROM category ORDER BY path;

Ergebnis:

pizza         0.1
piperoni      0.1.4
cheese        0.1.5
extra cheese  0.1.5.7
vegetariana   0.1.6
burger        0.2
coffee        0.3

Siehe Geige .

Auf diese Weise sind auch die Wartungskosten minimal. Das Pfadfeld wird beim Einfügen ausgeblendet und per Trigger berechnet. Das Entfernen eines Knotens hat keinen Overhead, da alle Kinder des Knotens ebenfalls entfernt werden. Das einzige Problem besteht beim Aktualisieren der parent_id eines Knotens; Nun, tun Sie das nicht! :)