sql >> Database >  >> RDS >> Mysql

selecteer query voor categoriegegevens met bovenliggende kindrelatie

Probeer zelf lid te worden :

BEWERKEN: Ik ben vergeten de WHERE-clausule te plaatsen

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

Maar de ideale oplossing is om een ​​recursieve functie te hebben die dit zal doen, aangezien je in die tabel een boomstructuur van categorieën beschrijft. De bovenstaande vraag is statisch en gaat 2 niveaus terug (2 subcategorieën) en van wat ik begrijp heb je iets dynamischs nodig.

Iets als de functie hieronder:

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

}

Dus aangenomen dat Apples categorie wordt overgenomen, is het resultaat voor getCategory(1) zou moeten zijn Fruits,Apples,Green Apples



  1. Het beste om * te gebruiken bij het aanroepen van veel velden in mysql?

  2. MySQL-variabelen in het ALTER TABLE-script

  3. Wat is SQL?

  4. Percentage rijen selecteren uit SQL-tabel?