可能な解釈は2つあります。最近のコメントから、最初のコメントが必要だと理解しています:
除外された親の子供を除外する
したがって、子供が編集者でなくても、祖先の1人が編集者である場合は、除外する必要があります。つまり、最も内側のクエリでレコードを除外する必要があります。where
を追加します。 そこに:
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))
除外された親の子供を含める
この解釈では、祖先のいずれかを除外するかどうかに関係なく、編集者の子を含める必要があります。
user_type
を追加します select
のフィールド 次のように、フィルタを実行するクエリを一覧表示してから折り返します。
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'
ここでも、結果には、親階層(親、祖父母、祖父母など)が完全に含まれていない可能性のあるレコードも含まれます(これらの一部は編集者である可能性があるため)。