sql >> Databasteknik >  >> RDS >> Mysql

beställa sql-trädhierarki

Genom att lägga till en sökvägskolumn och en utlösare kan detta göras ganska enkelt.

Lägg först till en varchar-kolumn som kommer att innehålla sökvägen från roten till noden:

ALTER TABLE category ADD path VARCHAR(50) NULL;

Lägg sedan till en trigger som beräknar sökvägen vid infogning:

(sammanfogar helt enkelt det nya id:t med sökvägen till föräldern)

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älj sedan helt enkelt order by path:

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 fiol .

På så sätt är underhållskostnaderna också minimala. Sökvägsfältet är dolt vid infogning och beräknas via trigger. Att ta bort en nod har ingen overhead, eftersom alla barn i noden också tas bort. Det enda problemet är när man uppdaterar parent_id för en nod; Tja, gör inte det! :)



  1. Hur man ändrar storleken på en kolumn i SQL Server (T-SQL)

  2. SQL Server 2008 Support upphör. Vad nu?

  3. Gå med Eliminering:När SQL Server tar bort onödiga tabeller

  4. hur man ställer in längden på en kolumn i viloläge med maximal längd