sql >> Database teknologi >  >> RDS >> Mysql

Hvordan henter man kategorier og underkategorier i en enkelt forespørgsel i sql? (mysql)

Hvis du spørger om "Er der i mysql rekursive forespørgsler?" svar "NEJ".

Men der er en meget god tilgang til at håndtere det.

Opret hjælpetabel (og siger CatHierarchy)

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

Disse redundante data gør det nemt i 1 forespørgsel at vælge ethvert hierarki, og i 2 indsættelser understøtter ethvert hierarki (sletning udføres også i 1 forespørgsel ved hjælp af sletning af kaskadeintegritet).

Så hvad betyder dette. Du sporer alle stier i hierarki. Hver node af Cat skal tilføje reference til sig selv (afstand 0), og derefter understøtte duplikering ved at tilføje redundante data om noder er linket.

For at vælge kategori med under skal du bare skrive:

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

someSpecifiedRootOfCat - er parameter til at specificere roden af ​​kategorien DET ER ALT!



  1. Hent de tomme poster ved hjælp af SQL

  2. JSON_ARRAY() Funktion i Oracle

  3. MySQL forespørger efter eksempler med svar

  4. MySQL Alter-tabel, tilføj kolonne med unik tilfældig værdi