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