Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361

    'Breadcrumb' di sottocategorie

    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
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    imola
    Messaggi
    47
    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

  3. #3
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    Ciao, grazie per la risposta, ma la tua soluzione non fa al caso mio!
    Le sottocategorie devono essere viste come entità a sè stanti, che hanno delle proprietà (tra cui il parent_id di appartenenza).
    La tua soluzione può essere usata per un'associazione basilare (utilizzando comunque gli ID al posto dei 'nomi' delle categorie), ma come ho scritto sotto è meglio prevedere la possibilità di avere N sottocategorie.. e mettere tutto su una tabella come quella proposta da te sarebbe un vero casino.

    Una tabella associativa poi diventa inutile dato che una sottocategoria può essere associata ad una sola categoria.. ecco il motivo del campo parent_id
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    imola
    Messaggi
    47
    riprendento l'esempio da te proprosto :

    menu1 --> categoria

    birre --> sottocategoria di menu1
    pizze --> sottocategoria di menu1
    di queste sottocategorie , legate a menu1 , ne puoi avere "n"

    tradizionali --> sottocategoria di "pizze"
    specialii --> sottocategoria di "pizze"
    di queste sottocategorie legate a sottocategoria "pizza" , ne puoi avere "n"


    corretto ?

  5. #5
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    Quote Originariamente inviata da antonioimola Visualizza il messaggio
    riprendento l'esempio da te proprosto :

    menu1 --> categoria

    birre --> sottocategoria di menu1
    pizze --> sottocategoria di menu1
    di queste sottocategorie , legate a menu1 , ne puoi avere "n"

    tradizionali --> sottocategoria di "pizze"
    specialii --> sottocategoria di "pizze"
    di queste sottocategorie legate a sottocategoria "pizza" , ne puoi avere "n"


    corretto ?
    si corretto
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.