Mysql
 sql >> Base de données >  >> RDS >> Mysql

ordonner la hiérarchie de l'arborescence sql

En ajoutant une colonne de chemin et un déclencheur, cela peut être fait assez facilement.

Ajoutez d'abord une colonne varchar qui contiendra le chemin de la racine au nœud :

ALTER TABLE category ADD path VARCHAR(50) NULL;

Ajoutez ensuite un déclencheur qui calcule le chemin lors de l'insertion :

(il suffit de concaténer le nouvel identifiant avec le chemin du parent)

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);

Ensuite, sélectionnez simplement trier par chemin :

SELECT name, path FROM category ORDER BY path;

Résultat :

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

Voir violon .

De cette façon, les coûts de maintenance sont également minimes. Le champ de chemin est masqué lors de l'insertion et est calculé via le déclencheur. La suppression d'un nœud n'a pas de surcharge, puisque tous les enfants du nœud sont également supprimés. Le seul problème est lors de la mise à jour du parent_id d'un nœud ; Eh bien, ne faites pas ça ! :)