- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Categorie e sotto categorie in un database Mysql?
-
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
-
Beh, ti ci vogliono almeno tre tabelle:
Tabella A - Categorie
Tabella B - SottoCategorie
Tabella C - Messaggii 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 CategoriaPrincipaleNumero3Tabella 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 2Tabella 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 6per 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.
-
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..
-
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