- Home
- Categorie
- Coding e Sistemistica
- PHP
- gestione relazione uno-a-molti
-
gestione relazione uno-a-molti
Ciao a tutti,
ho un problema particolare, che vorrei porre all'attenzione di tutti.
Allora, io sto gestendo un database di libri, molto semplice, con 3 sole tabelle.
La prima si chiama "infolibri" e contiene le informazioni riguardanti ogni libro, la seconda si chiama "infoautori" e contiene qualche info sugli autori, la terza si chiama "autorelibro" e mette in relazione l'id del libro con quello dell'autore, in questo modo se, per esempio, l'id di "il codice Da Vinci" è 12 (in infolibri) e quello di Dan Brown è 7 (in infoautori), la riga corrispondente su autorelibro è [12,7].
Ecco, nel dettaglio, le tabelle:
infolibri
id_libro, titolo, anno, voto, recensione, copertinainfoautori
id_autore, nome_cognome, foto, bandierinaautorelibro
id_libro, id_autoreAbbastanza chiaro e semplice da capire, no?
L'unico dubbio può essere il campo bandierina: serve per la nazionalità, che indico con una bandierina.
Questo perchè voglio crearmi dei select capaci di selezionarmi tutti i libri di una nazione, di un anno, valutati tot stelline, di un autore, etc...Ora, se per esempio seleziono tutti i libri di Dan Brown, non si pone nessun problema.
Il problema si pone, per esempio, con il libro "la casa del buio", scritto da Stephen King insieme a Peter Straub.
Se clicco su "Stephen King" o su "Peter Straub", nessun problema, il libro c'è anche se come autore mi da solo quello che ho selezionato.
Ma se clicco su "2001", su "U.S.A.", su "7 stelle" o su "mostra tutti", il libro "la casa del buio" appare 2 volte, e questo è quello che voglio evitare.
Vorrei trovare il modo, per i libri "multiautore", di ottenerne la visualizzazione una volta sola, elencando nella cella "autore" tutti gli autori che l'hanno scritto.
Direte voi che è un problema di scarsa importanza, dato che parliamo di oltre 120 libri, ma considerate che "il mio anno preferito" è una raccolta di 12 racconti, ognuno scritto da un autore diverso, questo farebbe apparire 12 volte il libro se ne seleziono il suo anno o se clicco su "mostra tutti"!
Una cosa del genere diventa non tollerabile.Qualcuno può aiutarmi? Aspetto con ansia!
Se il problema non è chiaro (ma non credo), non esitate a chiedere!
Ci sto impazzendo con questa cosa...
-
16 letture, nessuna risposta?
Vi prego, non mi abbandonate a me stesso!
-
Ciao... sinceramente ho trovato un pò confusionario il modo in cui hai agito
Se non vuoi modificare nulla, devi usare l'istruzione DISTINCT rispetto al titolo, in modo che non ti mostri più volte lo stesso libro (SELECT DISTINCT titolo WHERE....).
Però io ti consiglierei di modificare la struttura del tuo database. Il libro dovresti inserirlo una volta sola, e a questo record collegare i vari autori. Una cosa del tipo:
tabella libri
IDlibro IDautore NAZIONELibro NOMElibro 1 2,10 1,2 Libro 1 2 1 3 Libro 2
tabella autori
IDautore NOMEautore NAZIONEautore 1 Daw Brown 1 2 Stephen King 2 10 Peter Straub 3
tabella nazioni
IDnazione NOMEnazione 1 USA 2 INGHILTERRA 3 ITALIA
Questo ti permette di non inserire più volte le stesse informazioni. Spero di esserti stato utile!
-
Ciao Secta, grazie per la risposta.
La soluzione che hai proposto mi sembra interessante, solo ho qualche domanda da porti:- Come faccio a mettere più valori in un campo? Ovvero come faccio a far capire al sistema che non deve cercare "2,10" ma "2" e "10"?
- Come posso gestire un inserimento multiplo ("2,10") via pagina web?
- Questo non c'entra nulla con questa situazione, ma già che ci siamo chiedo ugualmente: quando inserisco la recensione, devo mettere il carattere "" davanti ogni apostrofo o virgoletta, altrimenti -ovviamente- non inserisce nulla nel database. Come posso risolvere quest'altro inconveniente?
-
Aiuto... per favore!