sql >> Database >  >> RDS >> Mysql

Hoe categorieën en subcategorieën op te halen in een enkele query in sql? (mysql)

Als u vraagt ​​over "Is er in mysql recursieve vragen?" antwoord "NEE".

Maar er is een zeer goede aanpak om ermee om te gaan.

Maak een helpertabel (zeg CatHierarchy)

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

Met deze redundante gegevens kan eenvoudig in 1 query elke hiërarchie worden geselecteerd en in 2 inserts elke hiërarchie worden ondersteund (verwijdering wordt ook in 1 query uitgevoerd met behulp van cascade-integriteit verwijderen).

Dus wat betekent dit. U volgt alle paden in hiërarchie. Elk knooppunt van Cat moet een verwijzing naar zichzelf toevoegen (afstand 0), en vervolgens duplicatie ondersteunen door redundante gegevens over knooppunten toe te voegen.

Om een ​​categorie met sub te selecteren, schrijf je gewoon:

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

someSpecifiedRootOfCat - is een parameter om de hoofdmap van categorie te specificeren DAT ALLES!



  1. Realtime operationele analyse en niet-geclusterde kolomopslagindex

  2. Tabel-ID ophalen na invoegen met ColdFusion en MySQL

  3. Veelvoorkomende MySql-interviewvragen en -antwoorden voor frisser + ervaren

  4. MySQL - selecteren in de buurt van een ruimtelijk punt