Hola se me ocurre que tenes que hacer una consulta que tenga recursividad.. o sea que se haga un join con si mismo !!!!
supongamos que la tabla se llama categoria
Código:
select categoria.nombre as categoria, subcategoria.nombre as subcategoria from categoria
left join categoria as subcategoria on categoria.id_cat = subcategoria.id_cat_superior
where categoria.id_cat_superior = 0
lo que pasa que el where del final solo te esta mostrando el primer nivel del arbol..
pero quizas podes ir probando a ver que sale y quizas ves algo.
Saludos.