Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22

    stampare in html relazione uno-a-molti

    Buongiorno a tutti.
    Ringrazio in anticipo quanti contribuiranno a superare questo piccolo (forse) intoppo
    Ho due entità: PERSONA(id, nome) e LIBRO(id, titolo, idpersona), legate da un'associazione 1-a-Molti.
    La mia idea è quella di stampare in una pagina HTML un menu ad albero costituito da ogni PERSONA e, per ciascuna, un sottolivello con i LIBRI che ha scritto.
    La query usata è la seguente:
    SELECT persona.id, persona.nome, libro.titolo, libro.idpersona FROM libro, persona WHERE libro.idpersona=persona.id ORDER BY persona.id;
    L'intoppo sta sul come stampare in maniera corretta con PHP in una pagina HTML il risultato.
    Per essere preciso, il risultato desiderato sarebbe qualcosa del tipo

    AUTORE 1
    --- LIBRO A
    --- LIBRO B
    AUTORE 2
    --- LIBRO C
    AUTORE 3
    --- LIBRO D
    --- LIBRO E


    Spero di essere stato chiaro nell'esposizione del problema.
    Grazie ancora.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    RISOLTO!
    Faccio una prima query prendendo tutti gli AUTORI e poi, PER OGNI AUTORE, faccio una query prendendo i libri che ha scritto.
    Grazie lo stesso!

  3. #3
    potresti agire con due cicli.
    una cosa del genere:
    codice:
    FOREACH autori
        STAMPA autore
        FOREACH autore
            PRENDI TUTTI I LIBRI DELL'AUTORE
    sostanzialmente eseguire la prima query per prendere gli autori, e per ogni autore fai un'altra query per i libri.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Codice PHP:
    $res=mysql_query($sql)
    while(
    $rk=mysql_fetch_array($res)){

     if(
    $autore_prec!=$rk['persona']){
        echo 
    $rk['persona.nome']."<br />";
     }
     echo 
    $rk['libro.nome']; 
     
    $autore_prec="---".rk['persona.id']."<br />";

    Ho scritto il listato a memoria e non ho controllato che funzione.
    Ho usato la mysql perchè mi è più comoda, ma è da integrare l'oggetto che usi tu per effettuare interrogazioni nel do.
    Cmq l'idea è di salvare alla fine del while l'autore letto, e all'inizio confrontare il precedente con l'attuare se differisce lo stampi altrimenti stampi solo il libro.

    Ciao
    Paolo
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Quote Originariamente inviata da datch Visualizza il messaggio
    RISOLTO!
    Faccio una prima query prendendo tutti gli AUTORI e poi, PER OGNI AUTORE, faccio una query prendendo i libri che ha scritto.
    Grazie lo stesso!
    Sicuramente funziona ma non è il massimo eseguire sql all'interno di un ciclo, ma tutto dipende dalla qta di dati che devi gestire.
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    Grazie mille fermat! La prima idea era quella di avere un result set "unico" ma poi, pensandoci bene, la "doppia query" è il modo più immediato!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    Sicuramente funziona ma non è il massimo eseguire sql all'interno di un ciclo, ma tutto dipende dalla qta di dati che devi gestire.
    Fractals grazie anche a te! Hai ragione, con una grande quantità di dati, aumenta la complessità nell'eseguire query in un ciclo. La relazione PERSONA-LIBRO era esemplificativa, ma comunque nel contesto reale il mio DB non deve gestire un grande volume di dati.
    Resta il fatto che la tua idea è ottima!

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    anche quella di fermat è ottimo, inoltre funziona se il recorset non è ordinato.
    Nel mio caso funziona solo se oridnato... ma ho visto che hai usato ORDER BY persona.id;
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    22
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    anche quella di fermat è ottimo, inoltre funziona se il recorset non è ordinato.
    Nel mio caso funziona solo se oridnato... ma ho visto che hai usato ORDER BY persona.id;
    Si, avevo usato ORDER BY perchè la primissima idea era quella di partire da un result set unico e stampare i libri di uno stesso autore. Mi mancava il passaggio (da te suggerito) di usare la variabile di appoggio "autore_prec".
    Comunque due soluzioni validissime! Grazie ragazzi!

  10. #10
    Codice PHP:
    $query "SELECT * FROM persona P LEFT JOIN libri L ON P.id = L.idpersona"
    Questa volta, più che un voto.. è favoreggiamento.

Tag per questa discussione

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.