sql >> Base de Datos >  >> RDS >> Mysql

Obtenga todos los niños por ID de padre y cláusula where en mysql

Hay dos interpretaciones posibles. Por un comentario reciente, entiendo que necesitas el primero:

Excluir hijos de padres excluidos

Entonces, incluso si los niños no son editores, si uno de sus antepasados ​​es editor, deben ser excluidos. Eso significa que debe excluir registros en la consulta más interna:agregue el where allí:

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 hijos de padres excluidos

En esta interpretación, desea que se incluyan los niños editores independientemente de si alguno de sus antepasados ​​debe ser excluido.

Agregue el user_type campo en el select list y luego ajuste esa consulta que realiza el filtro, así:

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'

De nuevo, aquí el resultado incluirá también registros cuya jerarquía principal (padre, abuelo, abuelo, ...) podría no estar completamente incluida (porque algunos de ellos podrían ser editores).