Ça me semble un peu compliqué et inflexible ce que tu fais ici Gilles. Ne serait-il pas préférable de créer votre table de base de données avec chaque ligne ayant son propre category_id et un parent_id ? c'est-à-dire donner aux parents de niveau supérieur un parent_id de 0 et les enfants prennent le parent_id du category_id de leur parent. Cela vous donnerait une profondeur illimitée et sera plus facile à coder lors du rendu de l'arbre. Par exemple :
SQL pour votre premier niveau de hiérarchie -
SELECT * FROM (your_table) WHERE parent_id=0
SQL pour votre deuxième niveau de hiérarchie -
SELECT * FROM (your_table) WHERE parent_id=(category_id of first level)
SQL pour votre troisième niveau de hiérarchie -
SELECT * FROM (your_table) WHERE parent_id=(category_id of second level)
et ainsi de suite...