Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni tutti i bambini per ID genitore e clausola where in MySQL

Sono possibili due interpretazioni. Da un recente commento ho capito che ti serve il primo:

Escludi i figli dei genitori esclusi

Quindi anche se i bambini non sono editori, se uno dei loro antenati è un editore dovrebbero essere esclusi. Ciò significa che dovresti escludere i record nella query più interna:aggiungi il 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))

Includi i figli di genitori esclusi

In questa interpretazione vuoi che i figli editor siano inclusi indipendentemente dal fatto che uno dei loro antenati debba essere escluso.

Aggiungi il user_type campo nel select list e quindi avvolgere la query che esegue il filtro, in questo modo:

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'

Quindi, ancora una volta, qui il risultato includerà anche i record di cui la gerarchia dei genitori (genitore, nonno, nonno, ...) potrebbe non essere completamente inclusa (perché alcuni di questi potrebbero essere editor).