Возможны две интерпретации.Из недавнего комментария я понимаю, что вам нужен первый:
Исключите детей исключенных родителей
Так что даже если дети не являются редакторами, если один из их предков является редактором, их следует исключить.Это означает, что вы должны исключить записи в самом внутреннем запросе: добавьте туда where
:
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))
Включить детей исключенных родителей
В этой интерпретации вы хотите, чтобы дети редактора были включены независимоо том, следует ли исключить кого-либо из их предков.
Добавьте поле user_type
в список select
, а затем оберните запрос, выполняющий фильтр, следующим образом:
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'
Итак, опять же, здесь результат будет включать также записи, родительская иерархия которых (родитель, дедушка, бабушка и дедушка, ...) может быть не полностью включена (поскольку некоторые из них могут быть редактором).