Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha todos os filhos por id pai e cláusula where no mysql


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