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

Come recuperare categorie e sottocategorie in una singola query in sql? (mysql)

Se chiedi "C'è nelle query ricorsive mysql?" rispondi "NO".

Ma c'è un ottimo approccio per gestirlo.

Crea una tabella di supporto (dicendo CatHierarchy)

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

Questi dati ridondanti consentono facilmente in 1 query di selezionare qualsiasi gerarchia e in 2 inserti supportano qualsiasi gerarchia (l'eliminazione viene eseguita anche in 1 query con l'aiuto dell'eliminazione dell'integrità a cascata).

Che cosa significa questo. Tieni traccia di tutti i percorsi nella gerarchia. Ogni nodo di Cat deve aggiungere un riferimento a se stesso (distanza 0), quindi supportare la duplicazione aggiungendo dati ridondanti sui nodi collegati.

Per selezionare la categoria con sub basta scrivere:

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

someSpecifiedRootOfCat - è il parametro per specificare la radice di categoryTHATS ALL!