Quote Originariamente inviata da LuckySevenRoX Visualizza il messaggio
Salve, ho realizzato un sistema per poter creare dei Menu/Cataloghi e inserire delle sottocategorie (fino al terzo livello). Un esempio che potremmo fare:

Menu1 > Birre
Menu1 > Pizze > Tradizionali
Menu1 > Pizze > Speciali

Menu2 > ....

le tabelle che abbiamo sono 'cataloghi' e 'cataloghi_categorie'
i campi importanti su 'cataloghi sono: id, titolo
i campi importanti su 'cataloghi_categorie' sono: id, catalogo_id, titolo, parent_id (che può essere 0 se è una sottocategoria diretta o contenere un ID di cataloghi_categorie)

questa query che ho realizzato funziona:

Codice PHP:
SELECT
    c
.titolo as PRINCIPALE,
    
cc2.titolo as SECONDO,
    
cc.titolo as TERZO
    FROM cataloghi c
    JOIN cataloghi_categorie cc
      ON c
.id cc.id_catalogo
    LEFT JOIN cataloghi_categorie cc2
      ON cc
.parent_id cc2.id
    WHERE 
... 
la query funziona bene, l'unica cosa è che se non ho un terzo livello ma solo un secondo livello, anzichè valorizzarmi il campo 'SECONDO', mi valorizza il 'TERZO', lasciando secondo a 'NULL'

Come posso migliorare la mia query, anche in termini di prestazioni?

Altra domanda: se le sottocategorie fossero 'infinite', che query mi conviene utilizzare?

Grazie


non so ma forse ti sei complicato la vita , io avrei impostato le
2 tabelle nel seguente modo :
tabella A
---+-------------
id descrizione
-----------------
1 menu 1
2 menu 2
3 menu 3
la tabella A definisce il catalogo di primo livello

tabella B
---+-----------------------
id | liv. 1| liv. 2
---------------------------
1 | birre |
1 | pizze | tradizionali
1 | pizze | speciali
2 | carne | arrosti
2 | pesce | frittura
la tabella B definisce il 2° e 3° livello

questa semplice query :
select * from
tabella A, tabella B
where id.A = 1
and id.A = id.B
restituisce i record nell'esempio da te proposto
per velocizzare l'esecuzione della query dovresti imposta un indice duplicato
almeno sulla tabella B , colonna ID , però , se le tabelle sono
relativamente piccole non è detto che guadagni benefici di performance
spero ti possa aiutare