• Bannato User Attivo

    Categorie e sotto categorie in un database Mysql?

    Ciao,

    dovrei usare delle categorie e delle sotto-categorie per inserire messaggi.

    Queste come potrei inserirle nella tebbella mysql?
    Cioè come le posso schematizzare?

    Grazie


  • User

    Beh, ti ci vogliono almeno tre tabelle:

    Tabella A - Categorie
    Tabella B - SottoCategorie
    Tabella C - Messaggi

    i messaggi sono inseriti nella Tabella C con il CODICE_SOTTOCATEGORIA corrispondente a quello inserito nella Tabella B

    le sotto categorie sono inserite nella Tabella B con il Codice Categoria a cui appartengono corrispondente al codice presente nella tabella A

    esempio:

    Tabella A (ti bastano due campi)
    Codice Descrizione
    1 CategoriaPrincipaleNumero1
    2 CategoriaPrincipaleNumero2
    3 CategoriaPrincipaleNumero3

    Tabella B (ci vogliono almeno 3 campi)

    Codice Descrizione CategoriaAppartenenza
    1 SottoCategoriaNumero1 1
    2 SottoCategoriaNumero2 1
    3 SottoCategoriaNumero3 1
    4 SottoCategoriaNumero4 2
    5 SottoCategoriaNumero5 2
    6 SottoCategoriaNumero6 2

    Tabella C (anche qui ci vogliono 3 campi per gestire la cosa)

    Codice Messaggio SottoCategoriaAppartenenza
    1 TestoMessaggioNumero1 1
    2 TestoMessaggioNumero2 1
    3 TestoMessaggioNumero3 2
    4 TestoMessaggioNumero4 2
    5 TestoMessaggioNumero5 5
    6 TestoMessaggioNumero6 6

    per i campi "Codice" in tutti e tre i casi si tratta di chiave primaria e ti consiglio di usare il tipo "Autoincrement" così ad ogni insert si incrementa da solo.

    poi nelle visualizzazioni ti basta fare le opportune JOIN tra le tabelle e ricordarsi di inserire i records con i codici giusti di appartenenza.


  • Bannato User Attivo

    Cosa fa precisamente il JOIN?

    Io avevo pensato a fare così:
    |Id_categoria|id_padre|nome_categoria|

    In modo da fare con un'unica tabella...ora provo..


  • User

    il JOIN serve appunto ad "unire" in un unica select tutte queste informazioni provenienti dalle 3 tabelle, per cui alla fine hai nella visualizzazione del record messaggi sia la sottocategoria che la categoria di appartenenza... in pratica la join mette in relazione tra loro le tabelle.

    si, il concetto è quello, devi avere l'ID del padre nel record della tabella, però ti sconsiglio di fare tutto con una tabella sola, è più confusionario e difficile da gestire, se impari ad usare le JOIN ti accorgerai che sono molto potenti e che ti possono aiutare in molti casi.

    volendo puoi anche fare a meno della JOIN nella select, te le fai da te in questo modo con la WHERE:

    SELECT tabA.,tabB.,tabC.* from tabellaA as tabA,tabellaB as tabB,tabellaC as tabC WHERE tabA.Codice=tabB.CategoriaAppartenenza AND tabC.SottoCategoriaAppartenenza=TabB.Codice

    la JOIN invece sarebbe:

    SELECT tabA.,tabB.,tabC.* from tabellaA as tabA LEFT JOIN tabellaB as tabB ON tabA.Codice=tabB.CategoriaAppartenenza LEFT JOIN tabellaC as tabC ON tabB.Codice=tabC.SottoCategoriaAppartenenza

    praticamente è la stessa cosa ma la JOIN ti permette anche di ottenere risultati diversi a seconda del tipo di JOIN (INNER JOIN, LEFT o RIGHT, LEFT OUTER o RIGHT OUTER, ecc...).

    comunque se quello che vuoi fare è una specie di "forum" probabilmente devi fare la JOIN tra la Tabella A e la Tabella B, visualizzi quindi l'elenco delle categorie con le sottocategorie, il link sulla sottocategoria ti porta ai messaggi.
    In realtà nei forums siamo su più livelli, ce ne sono almeno 4: Categoria,SottoCategoria,Discussione,Messaggi