Możliwe są dwie interpretacje. Z ostatniego komentarza rozumiem, że potrzebujesz pierwszego:
Wyklucz dzieci wykluczonych rodziców
Więc nawet jeśli dzieci nie są redaktorami, jeśli jeden z ich przodków jest redaktorem, należy je wykluczyć. Oznacza to, że powinieneś wykluczyć rekordy w najbardziej wewnętrznym zapytaniu:dodaj where
tam:
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))
Uwzględnij dzieci wykluczonych rodziców
W tej interpretacji chcesz, aby dzieci redaktorów były uwzględnione niezależnie od tego, czy którykolwiek z ich przodków ma zostać wykluczony.
Dodaj user_type
pole w select
wypisz, a następnie zapakuj zapytanie, które wykonuje filtr, w ten sposób:
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'
Więc znowu, tutaj wynik będzie zawierał również rekordy, których hierarchia rodzicielska (rodzic, dziadek, dziadek, ...) może nie być w pełni uwzględniona (ponieważ niektóre z nich mogą być edytowane).