sql >> Databasteknik >  >> RDS >> Mysql

Hur hämtar man kategorier och underkategorier i en enda fråga i sql? (mysql)

Om du frågar om "Finns det i mysql rekursiva frågor?" svara "NEJ".

Men det finns ett mycket bra sätt att hantera det.

Skapa hjälptabell (som säger CatHierarchy)

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

Denna redundanta data gör det enkelt i en fråga att välja valfri hierarki, och i 2 infoga stödja valfri hierarki (radering utförs även i en fråga med hjälp av radering av kaskadintegritet).

Så vad betyder detta. Du spårar alla vägar i hierarkin. Varje nod av Cat måste lägga till referens till sig själv (avstånd 0), sedan stödja duplicering genom att lägga till redundant data om noder är länkade.

För att välja kategori med sub skriv bara:

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

someSpecifiedRootOfCat - är parametern för att specificera roten av kategoriSOM ÄR ALLT!



  1. Hur avlyssnar man DB-förfrågningar? (MySQL)

  2. Vilken mysql-motor för enorma mängder data (loggning)?

  3. Applikationsstackens framtid

  4. Infoga stora mängder variabler i tabellen med PDO