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

bestil sql-træhierarki

Ved at tilføje en stikolonne og en trigger kan dette gøres forholdsvis nemt.

Tilføj først en varchar-kolonne, der vil indeholde stien fra rod til noden:

ALTER TABLE category ADD path VARCHAR(50) NULL;

Tilføj derefter en trigger, der beregner stien ved indsættelse:

(sammensætter simpelthen det nye id med stien til det overordnede)

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

Vælg derefter rækkefølge efter sti:

SELECT name, path FROM category ORDER BY path;

Resultat:

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

Se violin .

På denne måde er vedligeholdelsesomkostningerne også minimale. Stifeltet er skjult ved indsættelse og beregnes via trigger. Fjernelse af en node har ingen overhead, da alle nodens børn også fjernes. Det eneste problem er, når du opdaterer parent_id for en node; Nå, gør det ikke! :)



  1. Kombiner to kolonner og tilføj til en ny kolonne

  2. MySQL-opdatering eller omdøb en nøgle i JSON

  3. Fejlkode 1292 - Trunkeret forkert DOBBELT værdi - Mysql

  4. Laravel indlejrede forhold