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

MySqlの階層データ

    上で指摘したように、これは実際には再帰的ではありませんが、最大でいくつのステップを実行する必要があるかがわかっている場合は、これらの線に沿って何かを使用できます(おそらく、PHPを使用してクエリを生成します):

    最初に親IDを0ではなくNULLに設定しましたが、それは個人的な好みです。

    SELECT * FROM table t1
    LEFT JOIN table t2 ON t2.parent_id = t1.role_id
    LEFT JOIN table t3 ON t3.parent_id = t2.role_id
    WHERE t1.parent_id IS NULL
    

    ^^その場合はどんなに深く行く必要があります。

    [次のビットは厳密には関連していません ]

    次に、次の行に沿って出力を操作できます。

    SELECT
            (CASE 
            WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
            WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
            ELSE t1.name END)  AS first,
            (CASE 
            WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
            WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
            ELSE t3.name END)  AS second,
            (CASE 
            WHEN (t1.name IS NOT NULL) THEN t3.name
            ELSE  NULL END)  AS third
    FROM
    


    1. EXISTSをビットとして直接選択することは可能ですか?

    2. 2つのフィールドでgroupbyを使用し、SQLでカウントする

    3. PHPデータベース抽象化レイヤーとCRUDプラグインの比較

    4. DjangoモデルでのmySQLENUMの指定