sql >> Databasteknik >  >> RDS >> Mysql

Hierarkisk taggning i SQL

Jag implementerade det med två kolumner. Jag förenklar det här lite, eftersom jag var tvungen att behålla taggnamnet i ett separat fält/tabell eftersom jag var tvungen att lokalisera den för olika språk:

  • tagg
  • sökväg

Titta på dessa rader till exempel:

tag            path
---            ----
database       database/
mysql          database/mysql/
mysql4         database/mysql/mysql4/
mysql4-1       database/mysql/mysql4-1/
oracle         database/oracle/
sqlserver      database/sqlserver/
sqlserver2005  database/sqlserver/sqlserver2005/
sqlserver2005  database/sqlserver/sqlserver2008/

etc.

Använda like operatorn på sökvägsfältet kan du enkelt få alla nödvändiga taggrader:

SELECT * FROM tags WHERE path LIKE 'database/%'

Det finns vissa implementeringsdetaljer som när du flyttar en nod i hierarkin måste du ändra alla barn också etc., men det är inte svårt.

Se också till att längden på din väg är tillräckligt lång - i mitt fall använde jag inte taggnamnet för sökvägen, utan ett annat fält för att se till att jag inte får för långa vägar.



  1. Hur man jämför matriser i PostgreSQL

  2. Parameter Sniffing (eller Spoofing) i SQL Server

  3. Ett tabellnamn som en variabel

  4. Göra ändringar i flera poster baserat på ändring av en enda post med SQL