Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich alle Kinder nach Eltern-ID und Where-Klausel in MySQL

Es sind zwei Deutungen möglich. Aus einem kürzlichen Kommentar geht hervor, dass Sie den ersten benötigen:

Kinder von ausgeschlossenen Eltern ausschließen

Selbst wenn also Kinder keine Redakteure sind, sollten sie ausgeschlossen werden, wenn einer ihrer Vorfahren ein Redakteur ist. Das bedeutet, dass Sie Datensätze in der innersten Abfrage ausschließen sollten:Fügen Sie das where hinzu dort:

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

Kinder von ausgeschlossenen Eltern einbeziehen

In dieser Interpretation möchten Sie, dass Editor-Kinder unabhängig davon eingeschlossen werden, ob einer ihrer Vorfahren ausgeschlossen werden soll.

Fügen Sie den user_type hinzu Feld im select list auf und umschließe dann die Abfrage, die den Filter ausführt, wie folgt:

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'

Auch hier enthält das Ergebnis also auch Datensätze, deren Elternhierarchie (Eltern, Großeltern, Großeltern, ...) möglicherweise nicht vollständig enthalten sind (weil einige davon Bearbeiter sein könnten).