Mysql
 sql >> Base de données >  >> RDS >> Mysql

sélectionnez la requête pour les données de catégorie avec la relation parent-enfant

Essayez de vous joindre :

MODIF : J'ai oublié de mettre la clause 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

Mais la solution idéale est d'avoir une fonction récursive qui fera cela puisque dans ce tableau vous décrivez un arbre de catégories. La requête ci-dessus est statique, elle remonte à 2 niveaux (2 sous-catégories) et d'après ce que je comprends, vous avez besoin de quelque chose de dynamique.

Quelque chose comme la fonction ci-dessous :

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;
    }

}

Donc, en supposant que Apples categ hérite du résultat pour getCategory(1) devrait être Fruits,Apples,Green Apples