Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wybierz zapytanie dla danych kategorii z relacją rodzic-dziecko

Spróbuj dołączyć do siebie :

EDYTUJ: Zapomniałem umieścić klauzulę 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 idealnym rozwiązaniem jest posiadanie funkcji rekurencyjnej, która to zrobi, ponieważ w tej tabeli opisujesz drzewo kategorii. Powyższe zapytanie jest statyczne, cofa się o 2 poziomy (2 podkategorie) iz tego, co rozumiem, potrzebujesz czegoś dynamicznego.

Coś jak funkcja poniżej:

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

}

Zakładając więc, że kategoria Apples jest dziedziczona, wynik dla getCategory(1) powinno być Fruits,Apples,Green Apples



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracyjny klucz obcy a elokwentne relacje w Laravel

  2. Jaki jest ciąg połączenia sterownika MySQL JDBC?

  3. Kolejność wykonywania warunków w MySQL

  4. Jak zmapować typ Enum w mybatis za pomocą typeHandler podczas wstawiania

  5. Problem z bazą danych UTF-8