• User Attivo

    [PHP] Ciclo da capogiro, per una gerarchia di categorie illimitate

    Sto progettando un cms con la possibilità di aggiungere categorie e sottocategorie infinite agli articoli o annunci.

    Esempio:
    Immobiliare
    --Affittasi
    ----Monolocali
    ----Appartamenti
    --Vendesi
    ----Ville a schiera

    Mezzi di trasporto
    --Auto
    ----Utilitarie
    ------tre porte
    ------cinque porte
    ----Berline
    ----Cabrio

    Ho pensato di memorizzarle in un database con i seguenti campi:

    id_categoria, nome_categoria, id_genitore

    Quando id_genitore è uguale a zero, la categoria è alla radice.

    Nell'esempio di prima, la categoria *tre porte avrà come *id_genitore l'id_categoria di *utilitarie, *che a sua volta avrà come id_genitore l'id di auto, che avrà come genitore *Mezzi di trasporto. *Quest'ultima categoria avrà id_genitore zero.

    Molto semplice..........ma come estrapolo le categorie con la giusta gerarchia?

    Mi rimetto all'opera!

    A presto!


  • User Attivo

    be' se sono infinite, ti consiglio una struttura a "tag" che permette di associare più di una parola chiave ad una entità, piuttosto che ad albero (che per quanto complessa possa essere ha sempre problemi con le entità cross-border.)
    [/ot]

    Per il tuo problema, ti consiglio di creare un ciclo ricorrente, anche magari con 1 query con più left join per andare a ricercare sulla stessa tabella le categoria superiori.

    select b., l1., l2., l3., l4., l5. FROM tabella AS b LEFT JOIN tabella AS l1 ON id_categoria=b.id_genitore ....


  • User Attivo

    Grazie Piccolo Socrate,
    purtroppo con la tua query non risolvo molto :mmm:

    Quello che mi fa impazzire è ordinarle come nelle esempio del primo post.

    La categoria Immobiliare contiene la categoria affittasi che a sua volta contiene monolocali e appartamenti. Subito dopo c'è la categoria vendesi...

    Quindi per fare ad esempio un componente <select> di un form dove selezionare la categoria scelta....devo caricarli proprio in questo ordine.

    Io non demordo

    ciao