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

MySQL pai filhos uma seleção de consulta


Você precisa de uma junção recursiva que o mysql não suporta. A única coisa que você pode fazer é determinar o nível máximo de profundidade (no seu caso é 1 já que você tem p->c) e com isso você pode determinar o número de junções necessárias:

nível máximo de profundidade =número de autojunções :
SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id,
    c1.name as child_name
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
WHERE
    p.parent=0

Por exemplo, se o nível máximo de profundidade fosse 3, você precisaria de 3 auto-junções:
SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id_1,
    c1.name as child_name_1,
    c2.id as child_id_2,
    c2.name as child_name_2,
    c3.id as child_id_3,
    c3.name as child_name_3
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
LEFT JOIN my_table c2
    ON c2.parent = c1.id
LEFT JOIN my_table c3
    ON c3.parent = c2.id
WHERE
    p.parent=0