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