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