Възможни са две интерпретации. От скорошен коментар разбирам, че имате нужда от първия:
Изключване на деца на изключени родители
Така че дори децата да не са редактори, ако някой от техните предци е редактор, те трябва да бъдат изключени. Това означава, че трябва да изключите записи от най-вътрешната заявка:добавете 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'
Така че отново, тук резултатът ще включва и записи, чиито родителска йерархия (родител, баба и дядо, прабаба и дядо, ...) може да не е напълно включена (защото някои от тях може да са редактор).