Há duas interpretações possíveis. De um comentário recente, entendo que você precisa do primeiro:
Excluir filhos de pais excluídos
Portanto, mesmo que os filhos não sejam editores, se um de seus ancestrais for editor, eles devem ser excluídos. Isso significa que você deve excluir registros na consulta mais interna:adicione o
where
lá: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))
Incluir filhos de pais excluídos
Nesta interpretação, você deseja que os filhos do editor sejam incluídos, independentemente de qualquer um de seus ancestrais ser excluído.
Adicione o
user_type
campo no select
list e, em seguida, envolva essa consulta que executa o filtro, assim: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'
Então, novamente, aqui o resultado incluirá também registros dos quais a hierarquia dos pais (pai, avô, bisavô, ...) pode não ser completamente incluída (porque alguns deles podem ser editor).