sql >> データベース >  >> RDS >> Mysql

親IDとmysqlのwhere句ですべての子を取得します

    可能な解釈は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'
    

    ここでも、結果には、親階層(親、祖父母、祖父母など)が完全に含まれていない可能性のあるレコードも含まれます(これらの一部は編集者である可能性があるため)。



    1. SQLServer2005のINSERTWHERECOUNT(*)=0でのUNIQUEKEY制約への違反

    2. 特定の列が更新された場合にのみトリガーを実行する(SQL Server)

    3. SQL Serverで特定の日付より後のすべての日付をクエリするにはどうすればよいですか?

    4. Addnoderesolv.confの失敗