Este é apenas um Modelo de Adjacência tabela? Então não é possível em uma consulta sem saber a profundidade máxima.
O que pensar é Gerenciando dados hierárquicos no MySQL (embora eu não defenda o uso do Modelo de conjunto aninhado para dados que se alteram regularmente).
Com muitas junções (à esquerda), mais especificamente:com tantas junções à esquerda quanto a profundidade máxima da árvore, será possível em uma consulta. Esta é a razão pela qual muitas pessoas tendem a salvar a 'profundidade' de uma categoria específica, então você poderá filtrar e limitar a quantidade de junções na mesma tabela para uma quantidade mais sensata.
Pessoalmente, para alterar dados regularmente:costumo configurar um gatilho em uma inserção / atualização, que salvará / armazenará em cache o 'caminho' atual de um nó com base em id's (por exemplo:um caminho é '12/62/28/345 ', em que cada passo entre o delimitador
/
é a chave primária de um nó pai na ordem correta (o pai de 345 é 28, o pai de 28 é 62 etc.)), para que eu possa consultá-lo com apenas uma junção assim (/ usado como separador):SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;