sql >> Databasteknik >  >> RDS >> Mysql

Få alla barn efter förälder-id och where-klausul i mysql

Det finns två tolkningar möjliga. Från en kommentar nyligen förstår jag att du behöver den första:

Uteslut barn till uteslutna föräldrar

Så även om barn inte är redaktörer, om en av deras förfäder är redaktör bör de uteslutas. Det betyder att du bör exkludera poster i den innersta frågan:lägg till where där:

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

Inkludera barn till uteslutna föräldrar

I denna tolkning vill du att redaktörsbarn ska inkluderas oavsett om någon av deras förfäder ska exkluderas.

Lägg till user_type fältet i select lista och linda sedan den frågan som utför filtret, så här:

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'

Så återigen, här kommer resultatet även att inkludera poster där förälder-hierarkin (förälder, mor- och farförälder, mor- och farförälder, ...) kanske inte är helt inkluderad (eftersom några av dem kan vara redaktörer).



  1. PHP-MySQL-Hur ökar man säkert MySQL heltalsfält?

  2. Postgres unika begränsning vs index

  3. Formatera ett tal som valuta i MariaDB

  4. Att använda Solr sökindex som en databas - är det fel?