sql >> Base de Datos >  >> RDS >> Mysql

MySQL padres hijos una selección de consulta

Necesita una combinación recursiva que mysql no admite. Lo único que puede hacer es determinar el nivel máximo de profundidad (en su caso, 1 ya que tiene p->c) y con esto puede determinar la cantidad de uniones necesarias:

nivel máximo de profundidad =número de auto-uniones :

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 ejemplo, si su nivel máximo de profundidad fuera 3, necesitaría 3 uniones automáticas:

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