Zdá se mi to trochu komplikované a neflexibilní, co tady děláš Gillesi. Nebylo by lepší vytvořit svou databázovou tabulku s každým řádkem, který má své vlastní category_id a parent_id? tj. dejte rodičům nejvyšší úrovně parent_id 0 a děti vezmou parent_id id kategorie jejich rodiče. To vám poskytne neomezenou hloubku a bude jednodušší kódovat při vykreslování stromu. Například:
SQL pro vaši první úroveň hierarchie -
SELECT * FROM (your_table) WHERE parent_id=0
SQL pro vaši druhou úroveň hierarchie -
SELECT * FROM (your_table) WHERE parent_id=(category_id of first level)
SQL pro vaši třetí úroveň hierarchie -
SELECT * FROM (your_table) WHERE parent_id=(category_id of second level)
a tak dále...