Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    gestione libri con più autori...

    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...



  2. #2
    Utente di HTML.it L'avatar di ilgiovo
    Registrato dal
    Aug 2001
    Messaggi
    518
    dal punto di vista dell'SQL non puoi farlo... ovvero, non esiste una funzione di aggregazione che concatena stringhe, quindi non puoi avere in una sola istruzione quello che ti serve

    a questo punto puoi:
    - se hai un database che le supporta, puoi farti una function su db che dato l'id di un libro ti ritorna una stringa concatenata di autori, dopodichè la usi come campo nella select
    - estrarre tutti i record (n record per libro) e poi fare il group by tramite un linguaggio al momento di creare l'output dei dati
    - nel tuo applicativo estrarre i record dei libri (1 record per libro) utilizzando la clausola GROUP BY e poi fare delle sottoquery per estrarre tutti gli autori per quel libro
    Cacca!

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao e benvenuto.
    Come specificato nel regolamento di sezione che ti invito a leggere dovresti specificare quale database utilizzi.

    Ad esempio in mysql esiste la funzione group_concat() che consente di fare ciò che desideri

    codice:
    select il.titolo,group_concat(concat(ia.nome,' ',ia.cognome) order by ia.cognome,ia.nome) as autori
    from infolibri as il
    inner join autorelibro as al
    on il.id_libro = al.id_libro
    inner join infoautori as ia
    on ia.id_autore = al.id_autore
    group by al.id_libro

  4. #4
    Nicola non ho parole per ringraziarti!
    Mi hai dato quel comando "GROUP_CONCAT" che era proprio quello che mi ci voleva!
    Si, ok, ho dovuto fare altre ricerche qua e la, soprattutto per l' "explode" di php, ma tu hai centrato il problema e mi hai dato l'input giusto!
    Non finirò mai di ringraziarti!
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.