To, co tu robisz, wydaje się nieco skomplikowane i nieelastyczne. Czy nie byłoby lepiej utworzyć tabelę bazy danych, w której każdy wiersz ma swój własny identyfikator_kategorii i identyfikator_nadrzędny? tzn. daj rodzicom najwyższego poziomu parent_id równy 0, a dzieci pobierają parent_id z category_id swoich rodziców. Dałoby to nieograniczoną głębię i ułatwiłoby kodowanie podczas renderowania drzewa. Na przykład:
SQL dla pierwszego poziomu hierarchii -
SELECT * FROM (your_table) WHERE parent_id=0
SQL dla drugiego poziomu hierarchii -
SELECT * FROM (your_table) WHERE parent_id=(category_id of first level)
SQL dla Twojego trzeciego poziomu hierarchii -
SELECT * FROM (your_table) WHERE parent_id=(category_id of second level)
i tak dalej...