sql >> Databasteknik >  >> RDS >> Mysql

välj fråga för kategoridata med överordnad underordnad relation

Försök själv gå med :

EDIT: Jag glömde att sätta 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 idealiska lösningen är att ha en rekursiv funktion som gör detta eftersom du i den tabellen beskriver ett träd med kategorier. Frågan ovan är statisk, den går tillbaka 2 nivåer (2 underkategorier) och vad jag förstår behöver du något dynamiskt .

Något liknande funktionen nedan :

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å om vi antar att Apples categ ärvs resultatet för getCategory(1) ska vara Fruits,Apples,Green Apples



  1. Hur man använder ORDER BY inom UNION

  2. Olika värden räknas i samma kolumn

  3. PostgreSQL-replikeringsinställningar och underhåll med Ansible

  4. Var finns MySql 5.6-motsvarigheten till `MySQLInstanceConfig.exe` för att redigera konfigurationsfiler?