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

Jak načíst kategorie a podkategorie v jediném dotazu v SQL? (mysql)

Pokud se ptáte na otázku "Existují v mysql rekurzivní dotazy?" odpovězte "NE".

Ale existuje velmi dobrý přístup, jak to zvládnout.

Vytvořte pomocnou tabulku (říká CatHierarchy)

CatHierarchy:
    SuperId, ChildId, Distance
------------------------------ 
     1          1         0
     1          2         1
     2          2         0

Tato redundantní data umožňují snadno v 1 dotazu vybrat libovolnou hierarchii a ve 2 insert podporovat libovolnou hierarchii (vymazání se také provádí v 1 dotazu pomocí integrity kaskády mazání).

Co to tedy znamená? Všechny cesty sledujete v hierarchii. Každý uzel Cat musí přidat odkaz na sebe (vzdálenost 0), poté podporovat duplikaci přidáním redundantních dat o propojených uzlech.

Chcete-li vybrat kategorii s podřízeným, stačí napsat:

 SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
      WHERE ch.SuperId = :someSpecifiedRootOfCat

someSpecifiedRootOfCat - je parametr, který specifikuje kořen kategorieTHATS ALL!



  1. Jak pomocí PL/SQL dostanu obsah souboru do blobu?

  2. Upozornění na sloupec v cizím klíči, který není součástí indexu, během kompilace místnosti Android. Co to znamená?

  3. 3 způsoby, jak zkontrolovat typ dat sloupce v Oracle

  4. Nelze svázat argument na indexu 2, protože index je mimo rozsah