Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswahlabfrage für Kategoriedaten mit Eltern-Kind-Beziehung

Versuchen Sie, sich selbst beizutreten :

BEARBEITEN: Ich habe die WHERE-Klausel vergessen

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

Die ideale Lösung ist jedoch eine rekursive Funktion, die dies tut, da Sie in dieser Tabelle einen Baum von Kategorien beschreiben. Die obige Abfrage ist statisch, sie geht 2 Ebenen zurück (2 Unterkategorien) und soweit ich weiß, brauchen Sie etwas Dynamisches.

Etwas wie die Funktion unten:

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

}

Angenommen, Apples Kategorie wird geerbt, das Ergebnis für getCategory(1) sollte Fruits,Apples,Green Apples sein