sql >> Database teknologi >  >> RDS >> Mysql

vælg forespørgsel for kategoridata med overordnet underordnet forhold

Prøv selv at deltage :

EDIT: Jeg glemte at sætte WHERE-klausulen

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

Men den ideelle løsning er at have en rekursiv funktion, der vil gøre dette, da du i den tabel beskriver et træ af kategorier. Forespørgslen ovenfor er statisk, den går 2 niveauer tilbage (2 underkategorier), og efter hvad jeg forstår har du brug for noget dynamisk.

Noget som funktionen nedenfor :

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

}

Så hvis man antager, at Apples categ er arvet, er resultatet for getCategory(1) skal være Fruits,Apples,Green Apples



  1. Brug Java til ekstern backup af en MySQL-database

  2. Hvordan laver du date-matematik, der ignorerer året?

  3. Få dagsnavnet fra en dato i PostgreSQL

  4. INSERT-sætningen er i konflikt med FOREIGN KEY-begrænsningen - SQL Server