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.