Det finns två tolkningar möjliga. Från en kommentar nyligen förstår jag att du behöver den första:
Uteslut barn till uteslutna föräldrar
Så även om barn inte är redaktörer, om en av deras förfäder är redaktör bör de uteslutas. Det betyder att du bör exkludera poster i den innersta frågan:lägg till where
där:
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))
Inkludera barn till uteslutna föräldrar
I denna tolkning vill du att redaktörsbarn ska inkluderas oavsett om någon av deras förfäder ska exkluderas.
Lägg till user_type
fältet i select
lista och linda sedan den frågan som utför filtret, så här:
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å återigen, här kommer resultatet även att inkludera poster där förälder-hierarkin (förälder, mor- och farförälder, mor- och farförälder, ...) kanske inte är helt inkluderad (eftersom några av dem kan vara redaktörer).