Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    61

    Estrarre i dati da 2 tabelle che hanno in comune l'editore

    Salve a tutti è il mio primo Topic su questo sito .
    Il mio problema è il seguente:

    - io ho 2 tabelle , la prima è dedicata alle case editrici e oltre al nome della casa editrice c'è scritto l'indirizzo ed altri dati , nella seconda tabella ho una serie di libri dove fra le varie voci c'è anche casa editrice , titolo , autore ect.
    Vorrei che per ogni casa Editrice fossero riportati tutti i libri ed i rispettivi dati di quei libri suddivisi appunto per Editore, come posso fare?

    Faccio un esempio pratico di quello che vorrei:

    EDITORE : Trecani
    _____________________________________________
    Titolo del libro : Chi ha ucciso quell'uomo
    Autore: Luigi Stroppa
    data di publicazione : 2012
    Editore: Trecani
    -------------------------------------------------------------
    Titolo del libro : Domani Sarah
    Autore: Anna Giovini
    data di publicazione : 2010
    Editore: Trecani
    -------------------------------------------------------------
    Titolo del libro : Vedere Lontano
    Autore: Giovanni Ori
    data di publicazione : 2013
    Editore: Trecani
    ______________________________________________

    EDITORE : Apogeo
    ______________________________________________
    Titolo del libro : Preso Prima
    Autore: Clemente Risso
    data di publicazione : 2009
    Editore: Apogeo
    -------------------------------------------------------------
    Titolo del libro : Quello che le donne non dicono
    Autore: Andrea Stretti
    data di publicazione : 2011
    Editore: Apogeo
    -------------------------------------------------------------
    Titolo del libro : Giovani Rampanti
    Autore: Daria Damiani
    data di publicazione : 2012
    Editore: Apogeo
    ______________________________________________

    Ect.

    Ho bisogno di estrarre i dati dalle due tabelle e poi di fare una unica query qualcosa del tipo:

    [QUOTE] $qry = "SELECT * FROM `Editori`,`Libri` WHERE nome_editore = editore_libro GROUP By nome_editore"; [QUOTE]

    ma il risultato che mi viene fuori è che viene fuori solo 1 titolo del libro per casa editrice , come se ne leggesse il primo record della tabella libri.
    Come posso risolvere ? qual'è la Query giusta?

    Da quello che ho compreso devo riuscire a raggruppare i libri per Editore ed inserirli ognuno dei libri con Editore uguale all'interno della <table></table> Editori, ma non so come fare.

    Grazie per il tempo che mi è stato dedicato
    Distinti Saluti

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Il problema è il GROUP BY, che in pratica ti tira fuori un record per ogni editore.

    Forse la cosa più semplice è usare ORDER BY

    $qry = "SELECT * FROM `Editori`,`Libri` WHERE nome_editore = editore_libro ORDER BY nome_editore";

  3. #3
    Ciao,

    la sezione è errata, quella corretta è la Database
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    se vuoi raggruppare per editore, autore e titolo devi raggruppare per questi tre campi. es:

    group by tab.editore, tab1.autore, tab1.titolo

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    61
    Scusate intanto per aver sbagliato la sezione.
    Forse mi sono spiegato male io.
    Ho due tabelle composte cosi:

    1-Nome Tabella: Editori
    i campi al suo interno sono:
    - Nome del presidente
    - Nome Editoria
    - Vicepresidente
    - Indirizzo
    - Commissione interna

    2- Nome Tabella : Libri
    - Autore
    - Titolo
    - Editore
    - Anno pubblicazione
    - Copertina
    - Sottotitolo
    - Prezzo

    E quello che vorrei ottenere è che ogni libro sia catalogato ( quindi raggruppato ) per Editore , cosi che tutti i libri che hanno per editore per esempio Trecani si trovino nella <table></table> denominata 3 Cani che come titolo avrà un qualcosa del tipo : "Trecani - Presidente: Ernesto Giugi - Vide: Luigi Pini - Indirizzo : Roma , Via del paradiso - Commissione interna : Si" e che come contenuto della <table> </table> abbia i libri contenenti tutti i dati di ognuno dei singoli libri ma riuniti per Editore.

    L'esempio visivo ed il risultato finale che vorrei ottenere è quello che vi ho inserito nel primo post.
    Poi mi devo correggere in quanto con la query che ho scritto nel primo post non estrae solo un record ma ne estrae : nella prima <table></table> solo 1 , nella seconda <table></table> ne estrae 2 , nella terza <table></table> ne estrae 3 , e cosi via. Al momento ho creato 5 tabelle e infatti nella quinta tabella i record contenuti nella <table></table> sono 5 quindi con la query scritta da me il numero di libri per Editore varia a seconda del numero dell'Editore. In più non è che assegna per gli Editori i corrispettivi libri ma assegna al primo Editore un libro , al secondo Editore assegna lo stesso libro + un altro , nel terso editore assegna i primi due + un altro e cosi via.

    La soluzione credo che sia qualcosa che su questo sito viene chiamato "Associazione di uno con molti" ma non so come fare , in quanto quell'uno dovrebbe essere l'Editore e i molti dovrebbero essere i libri ch contengono molti più dati rispetto alla tabella edll'Editore.
    Per spiegarmi proprio bene si può dire che : "L'editore è il contenitore che ha dei dati suoi , che contiene i libri che hanno ognuno i propri dati" <-- come posso fare per ottenere questo?

    Grazie della cortese attenzione
    Distinti Saluti

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    Anzichè fare un'unica query che ti restituisca tutti i dati in un unico dataset, forse ti conviene fare una query che ti restituisce l'elenco delle case editrici e mentre effettui il ciclo for su questo elenco visualizzi a video i dettagli della casa editrice ed effettui una query che ti restituisce l'elenco dei libri appartenenti ad essa.

    Il risultato è che fai più query (una per ogni casa editrice) ma con meno dati restituiti per ciascuna.
    Se la risposta ti è stata in qualche modo di aiuto o ti va di supportarmi metti "mi piace" alla pagina a questo link

    https://www.facebook.com/blogprogrammatori

    Non ti costa nulla!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    61
    Ti ringrazio per la risposta ( e ringrazio anche gli altri ragazzi ) ma devo assolutamente ottenere tutti i dati sia della casa Editrice che dei Libri , in più ho necessità di avere un unica query. Sono certo che esiste il modo di far "visualizzare tanti elementi divisi per Editoria" ma non so come fare.

    Il fatto è anche che oggi per esempio ho 5 case editrici ma domani potrei averne 100 , quindi ho bisogno che non debba fare per ogni casa Editrice una singola query ( che saprei come fare) ma che indifferentemente dal numero di Editori e di libri vengano suddivisi i libri a seconda del diverso editore , e che ogni editore abbia i propri dati ( presidente, vice , indirizzo , ect.) e che ogni libro abbia i propri dati (titlo , autore , ect.) l'unica cosa che accomuna le due tabelle (Editori, Libri) è la voce in comune "editori" che nella tabella Editori si chiama "nome_editore" e nella tabella dei Libri si chiama "editore_libri".

    Attendo qualche altro consiglio utile.
    Vi ringrazio per la vostra attenzione.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    Semplicemente la query la fai così

    SELECT * FROM `Editori`,`Libri` WHERE nome_editore = editore_libro ORDER By nome_editore

    e tramite codice, quando generi l'html, durante il ciclo for devi tenere d'occhio quando cambia l'editore e 'al cambio' stampare l'intestazione dell'editore.

    Un'altra soluzione potrebbe essere quella di fare una query che restituisca un dataset costituito da due table che poi tramite codice li annidi (nested) in base alla chiave.

    Non so se con mysql e php una cosa di questo tipo è agevole io l'ho usata in asp.net sql server

    Altre soluzioni non ne conosco. Anche perchè il risultato della query avrà gli stessi campi per ogni riga e non puoi sperare di ottenere un dataset con una sola table che ha campi diversi a seconda della riga.

    Come mi sembra ti abbiano già risposto il lavoro da fare è tramite codice php su come generi l'html la query più semplice è appunto prendere tutte le righe dei libri relazionate con quelle degli editori.
    Se la risposta ti è stata in qualche modo di aiuto o ti va di supportarmi metti "mi piace" alla pagina a questo link

    https://www.facebook.com/blogprogrammatori

    Non ti costa nulla!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    61
    Ho appena inserito la query che mi hai suggerito ma il risultato che ottengo è una moltiplicazione della stessa casa Editrice ripetuta più volte ed un aumento esponenziale dei libri al variare della casa editrice.
    Per intenderci : la casa "trecani" da una che era con il mio codice adesso ne compaiono 3 ( quando nella tabella ne esiste solo una ) e per quelle tre table nella prima si trova 1 record , nella seconda 2 e nella terza 3.
    Non so come fare per a "tenere d'occhio quando cambia l'editore", come posso fare?
    Avevo utilizzato GROUP BY per raggruppare i libri con lo stesso editore, credevo che funzionasse cosi.
    In fondo come pensiero mi basterebbe raggruppare tutti i libri ( con i rispettivi dati ) della tabella Libri per Editore e far comparire questi libri nella tabella dello stesso Editore, ma non riesco a farlo con una query unica.

    grazie dell'aiuto.
    Attendo una nuova risposta.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231
    posta il codice PHP con cui visualizzi i dati (è lì che devi mettere le mani in pasta) quello che ti restituisce la query è giusto.
    Se la risposta ti è stata in qualche modo di aiuto o ti va di supportarmi metti "mi piace" alla pagina a questo link

    https://www.facebook.com/blogprogrammatori

    Non ti costa nulla!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.