Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL parents enfants une sélection de requête

Vous avez besoin d'une jointure récursive que mysql ne prend pas en charge. La seule chose que vous pouvez faire est de déterminer le niveau maximum de profondeur (dans votre cas, c'est 1 puisque vous avez p->c) et avec cela, vous pouvez déterminer le nombre de jointures nécessaires :

niveau de profondeur maximal =nombre d'auto-jointures :

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

Par exemple, si votre niveau de profondeur maximum était de 3, vous auriez besoin de 3 auto-jointures :

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