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

Få alle børn efter forældre-id og hvor-klausul i mysql

Der er to mulige fortolkninger. Fra en nylig kommentar forstår jeg, at du har brug for den første:

Ekskluder børn af udelukkede forældre

Så selvom børn ikke er redaktører, bør de udelukkes, hvis en af ​​deres forfædre er redaktør. Det betyder, at du skal ekskludere poster i den inderste forespørgsel:tilføj where der:

select  id,
        name,
        parent_id,
        user_type
from    (select * from p
         where user_type <> 'editor'
         order by parent_id, id) products_sorted,
        (select @pv := '19') initialisation
where   find_in_set(parent_id, @pv)
and     length(@pv := concat(@pv, ',', id))

Inkluder børn af udelukkede forældre

I denne fortolkning ønsker du, at redaktørbørn skal inkluderes, uanset om nogen af ​​deres forfædre skal udelukkes.

Tilføj user_type feltet i select liste, og pak derefter den forespørgsel, der udfører filteret, sådan her:

select  *
from    (
        select  id,
                name,
                parent_id,
                user_type
        from    (select * from p
                 order by parent_id, id) products_sorted,
                (select @pv := '19') initialisation
        where   find_in_set(parent_id, @pv)
        and     length(@pv := concat(@pv, ',', id))
) as sub
where user_type <> 'editor'

Så igen, her vil resultatet også inkludere registreringer, hvor forældre-hierarkiet (forælder, bedsteforælder, bedsteforælder, ...) muligvis ikke er fuldstændig inkluderet (fordi nogle af dem kunne være redaktør).



  1. Sådan opgraderes PostgreSQL10 til PostgreSQL11 med nul nedetid

  2. Opret tabel i by sql-sætning ved hjælp af executeUpdate i Mysql

  3. Konverter MySQL til SQLite

  4. Sådan fungerer SQLite Length()