Изглежда малко сложно и негъвкаво това, което правиш тук, Жил. Няма ли да е по-добре да създадете вашата таблица с база данни, като всеки ред има свой собствен category_id и parent_id? т.е. дайте на родителите от най-високо ниво parent_id от 0 и децата вземат parent_id от category_id на своя родител. Това ще ви даде неограничена дълбочина и ще бъде по-лесно за кодиране, когато изобразявате дървото. Например:
SQL за вашето първо ниво на йерархия -
SELECT * FROM (your_table) WHERE parent_id=0
SQL за вашето второ ниво на йерархия -
SELECT * FROM (your_table) WHERE parent_id=(category_id of first level)
SQL за вашето трето ниво на йерархия -
SELECT * FROM (your_table) WHERE parent_id=(category_id of second level)
и така нататък...