sql >> Database >  >> RDS >> Mysql

Krijg alle kinderen op ouder-ID en waar-clausule in mysql

Er zijn twee interpretaties mogelijk. Uit een recente opmerking begrijp ik dat je de eerste nodig hebt:

Kinderen van uitgesloten ouders uitsluiten

Dus zelfs als kinderen geen redacteuren zijn, moeten ze worden uitgesloten als een van hun voorouders redacteur is. Dat betekent dat u records in de binnenste query moet uitsluiten:voeg de where . toe daar:

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))

Kinderen van uitgesloten ouders opnemen

In deze interpretatie wilt u dat editor-kinderen worden opgenomen, ongeacht of een van hun voorouders moet worden uitgesloten.

Voeg de user_type . toe veld in de select lijst en wikkel vervolgens die query die het filter uitvoert, als volgt:

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'

Dus nogmaals, hier zal het resultaat ook records bevatten waarvan de bovenliggende hiërarchie (ouder, grootouder, groot-grootouder, ...) mogelijk niet volledig is opgenomen (omdat sommige daarvan editor kunnen zijn).



  1. SQL INTERSECT

  2. Converteer eenvoudig uw Microsoft Access-query's met deze nieuwe tool!

  3. Het SQL Server-transactielogboek, deel 1:Basisprincipes van logboekregistratie

  4. Hoe aanmeldingen werken op gekoppelde servers (T-SQL-voorbeelden)