• User Newbie

    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, copertina

    infoautori
    id_autore, nome_cognome, foto, bandierina

    autorelibro
    id_libro, id_autore

    Abbastanza 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...
    :dull:


  • User Newbie

    16 letture, nessuna risposta?
    Vi prego, non mi abbandonate a me stesso!
    :crying:


  • User Newbie

    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!


  • User Newbie

    Ciao Secta, grazie per la risposta.
    La soluzione che hai proposto mi sembra interessante, solo ho qualche domanda da porti:

    1. 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"?
    2. Come posso gestire un inserimento multiplo ("2,10") via pagina web?
    3. 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?

  • User Newbie

    Aiuto... per favore!