Se você está perguntando sobre "Existe nas consultas recursivas do mysql?" responda "NÃO".
Mas há uma abordagem muito boa para lidar com isso.
Crie uma tabela auxiliar (dizendo CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Esses dados redundantes permitem facilmente em 1 consulta selecionar qualquer hierarquia e em 2 inserir suportar qualquer hierarquia (exclusão também realizada em 1 consulta com a ajuda de excluir integridade em cascata).
Então o que isso quer dizer. Você acompanha todo o caminho na hierarquia. Cada nó do Cat deve adicionar referência a si mesmo (distância 0) e, em seguida, suportar a duplicação adicionando dados redundantes sobre os nós vinculados.
Para selecionar a categoria com sub basta escrever:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - é o parâmetro para especificar a raiz da categoriaTHATS ALL!