sql >> Databáze >  >> RDS >> Mysql

Získejte všechny děti podle ID rodiče a klauzule Where v mysql

Jsou možné dva výklady. Z nedávného komentáře jsem pochopil, že potřebujete ten první:

Vyloučit děti vyloučených rodičů

Takže i když děti nejsou editory, pokud jeden z jejich předků je editor, měli by být vyloučeni. To znamená, že byste měli vyloučit záznamy v nejvnitřnějším dotazu:přidejte where tam:

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

Zahrnout děti vyloučených rodičů

V této interpretaci chcete, aby byly zahrnuty děti editorů bez ohledu na to, zda mají být vyloučeni někteří z jejich předků.

Přidejte user_type v poli select seznam a poté zabalte dotaz, který provádí filtr, takto:

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'

Takže opět zde bude výsledek zahrnovat i záznamy, jejichž hierarchie rodičů (rodič, prarodič, praprarodič, ...) nemusí být zcela zahrnuta (protože někteří z nich mohou být editorem).



  1. Jak importovat soubor Excel do databáze mysql z PHP

  2. Top 50 otázek k rozhovoru pro MySQL, které si musíte připravit v roce 2022

  3. Standardy pro přidání data/času?

  4. Jak získat kalendářní čtvrtletí z data v TSQL