sql >> Databáze >  >> RDS >> Mysql

vyberte dotaz na data kategorie s nadřazeným podřízeným vztahem

Zkuste se připojit:

UPRAVIT: Zapomněl jsem vložit klauzuli 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

Ale ideálním řešením je mít rekurzivní funkci, která to udělá, protože v této tabulce popisujete strom kategorií. Výše uvedený dotaz je statický, vrací se o 2 úrovně zpět (2 podkategorie) a z toho, co jsem pochopil, potřebujete něco dynamického.

Něco jako funkce níže:

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

}

Takže za předpokladu, že kateg Apples je zděděn, výsledek pro getCategory(1) by mělo být Fruits,Apples,Green Apples



  1. Funkce TAN() v Oracle

  2. MySQL vypočítá klouzavý průměr N řádků

  3. SQL dotaz- Aktualizujte, pokud existuje, vložte jinak

  4. SQL Server REPLACE() vs TRANSLATE():Jaké jsou rozdíly?