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

親子関係を持つカテゴリデータのクエリを選択します

    自己参加してみてください:

    編集: WHERE句を入れるのを忘れました

    SELECT
        a.name,
        b.name,
        c.name
    FROM 
        category as a
    LEFT JOIN category as b
        ON b.parent_id = a.id
    INNER JOIN category as c
        ON c.parent_id = b.id
        AND c.inherit = 'Y'
    WHERE
        a.id = 1
    

    ただし、理想的な解決策は、これを実行する再帰関数を使用することです。これは、そのテーブルでカテゴリのツリーを記述しているためです。上記のクエリは静的であり、2つのレベル(2つのサブカテゴリ)に戻ります。私が理解していることから、動的なものが必要です。

    以下の関数のようなもの:

    public String getCategory(int categId){
    
        String sSql = "SELECT name FROM category WHERE id = " + categId ;
        String name = oDb.exec(sql).get("name");
    
        sSql = "SELECT id FROM category WHERE inherit = 'Y' AND parent_id = " + categId ;
        int nextCategId = oDb.exec(sql).get("id");
    
        if(nextCategId != null){
            return name + "," + getCategory(nextCategId);
        }else{
            return name;
        }
    
    }
    

    したがって、ApplescategがgetCategory(1)の結果を継承すると仮定します。 Fruits,Apples,Green Applesである必要があります



    1. JPA/EclipseLinkを使用して永続化をカスケードする方法

    2. mysql日付の年の変更

    3. 文字列に基づいて動的にPHPオブジェクトを作成する

    4. MySQLラージテーブルのインポート