Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie rufe ich Kategorien und Unterkategorien in einer einzigen Abfrage in SQL ab? (mysql)

Wenn Sie fragen:"Gibt es in mysql rekursive Abfragen?" antworten Sie mit "NEIN".

Aber es gibt einen sehr guten Ansatz, damit umzugehen.

Hilfstabelle erstellen (mit CatHierarchy)

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

Diese redundanten Daten ermöglichen es, in 1 Abfrage jede Hierarchie auszuwählen und in 2 Einfügungen jede Hierarchie zu unterstützen (Löschen wird auch in 1 Abfrage mit Hilfe der Löschkaskadenintegrität durchgeführt).

Also was bedeutet das. Sie verfolgen alle Pfade in der Hierarchie. Jeder Cat-Knoten muss einen Verweis auf sich selbst hinzufügen (Distanz 0) und dann die Duplizierung unterstützen, indem redundante Daten über verknüpfte Knoten hinzugefügt werden.

Um eine Kategorie mit Sub auszuwählen, schreiben Sie einfach:

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

someSpecifiedRootOfCat - ist ein Parameter, um den Stamm von categoryTHATS ALL anzugeben!