sql >> Database teknologi >  >> RDS >> Mysql

MySQL overordnede børn et valg af forespørgsel

Du har brug for et rekursivt join, som mysql ikke understøtter. Det eneste du kan gøre er at bestemme det maksimale dybdeniveau (i dit tilfælde er det 1, da du har p->c), og med dette kan du bestemme antallet af nødvendige sammenføjninger:

maksimalt niveau af dybde =antal selvforbindelser :

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

Hvis du f.eks. maksimale dybdeniveau var 3, ville du have brug for 3 selvforbindelser:

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


  1. Feedvalgsindstillinger fra DB afhængigt af andre valgmuligheder

  2. Beregning af tidsforskel mellem 2 datoer i minutter

  3. Fjern MySQL Ubuntu 14.04 LTS fuldstændigt

  4. MySQL SELECT hyppigst efter gruppe