Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - É possível obter todos os subitens em uma hierarquia?


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>;