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

Dados hierárquicos no MySql


Como apontado acima, isso não é realmente recursivo, mas se você sabe quantos passos profundos precisa percorrer no máximo, pode usar algo nesse sentido (talvez use PHP para gerar a consulta):

Eu primeiro definiria o ID do pai como NULL em vez de 0, mas isso é preferência pessoal.
SELECT * FROM table t1
LEFT JOIN table t2 ON t2.parent_id = t1.role_id
LEFT JOIN table t3 ON t3.parent_id = t2.role_id
WHERE t1.parent_id IS NULL

^^ quão profundo você precisa ir nesse caso.

[próximo bit não estritamente relevante ]

Você pode então manipular a saída algo ao longo destas linhas:
SELECT
        (CASE 
        WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
        WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
        ELSE t1.name END)  AS first,
        (CASE 
        WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
        WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
        ELSE t3.name END)  AS second,
        (CASE 
        WHEN (t1.name IS NOT NULL) THEN t3.name
        ELSE  NULL END)  AS third
FROM