Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25

    [jsp] while annidati per comment system

    Carissimi ringrazio l'anima pia che mi aiuterà, purtroppo riconosco di avere dei limiti e non so veramente come comportarmi.
    Ho tre resultset ed un while per ciascuno di essi. Sto infatti sviluppando un sistema di commenti e a ciascuno dei resultset corrispondono rispettivamente il nome di chi commenta, il commento ed il numero dei voti.

    Al termine dell'ultimo while ho messo il codice html relativo al commento, sul quale stampare i miei resultset. Vorrei quindi che il ciclo ripartisse dall inizio e ogni volta mi stampasse tutti i commenti, gli utenti ed i voti che hanno determinate caratteristiche

    Il problema è che annidando questi while mi vengono i risultati più strampalati, so che devo infilare dentro qualche break o continue per avere di ogni commento l'utente ed il numero di voti, ma il mio cervellino non ci arriva e vado in tilt. qualcuno mi può aiutare??

    ecco i while


    codice:
    try {
    
    
        Statement state2 = con.createStatement( );
    
    
    
    
    ResultSet rs1 = state2.executeQuery("SELECT commenti.voti FROM commenti  WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica");
    
    // PRIMO
    while (rs1.next()) { 
        
        String topic3 = rs1.getString ("voti");
        
        
    try {
    
    
        Statement state3 = con.createStatement( );
    
    
    
    
    ResultSet rs2 = state3.executeQuery("SELECT commento FROM  commenti  WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica");
    
    //SECONDO 
    while (rs2.next()) { 
        
    
    
        String topic2 = rs2.getString ("commento");
    
    
        try {
    
    
            Statement state4 = con.createStatement( );
    
    
    
    
        ResultSet rs3 = state4.executeQuery("SELECT nome_ut_comm FROM  commenti  WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica");
    
    
    //TERZO 
        while (rs3.next()) { 
            
    
    
            String topic4 = rs3.getString ("nome_ut_comm");
            
                %>
        
    //CODICE HTML NEL QUALE HO INFILATO I RESULTSET 
        <div class="media">
        <a class="pull-left" href="#">
            <img class="media-object" src="http://i60.tinypic.com/118de6g.png" alt="">
        </a>
        <div class="media-body">
    
    // PRIMO RESULTSET
            <h4 class="media-heading"> <%= rs3.getString (1) %>
    
    // SECONDO RESULTSET
                <small>Voti: <%= rs1.getString (1) %> </small>
            </h4>
    
    //TERZI RESULTSET
           <%=rs2.getString (1) %>
        </div>
    </div>
    
    
    
    
    <%
    
    
        }
            continue;
    }
    
    
    catch (Exception e){
    e.printStackTrace();    
    }
                        
    }
    
    
    }
    
    
    catch (Exception e){
    e.printStackTrace();    
    }        
    
    
    }
    }
    
    
    catch (Exception e){
    e.printStackTrace();    
    }
    Ultima modifica di MItaly; 15-10-2014 a 01:41 Motivo: Tag CODE

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Perché 3 result set diversi? Non puoi fare un'unica query invece di 3?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Appunto ... è proprio quello che pensavo io. La parte "FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica" è sostanzialmente uguale nelle 3 select. Quindi non basta una sola select?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Appunto ... è proprio quello che pensavo io. La parte "FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica" è sostanzialmente uguale nelle 3 select. Quindi non basta una sola select?
    intanto grazie per l'aiuto!!! sono un nubbone e sbaglio sicuramente qualcosa e mi chiedo: ma se il result set fosse uno solo, poi come faccio ad inserire ed a stampare nell'html finale il nome, il commento ed il voto in tre punti diversi?
    Io ho (forse ignorantemente) usato 3 result set in modo da avere in 3 getstring diversi il nome, il voto ed il commento, e ciascuno di essi li ho potuti inserire in tre parti diverse del codice html.
    se faccio un solo REsultset ad esempio ( SELECT* FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica) come posso isolare queste 3 info ed inserirle nell'html separatamente ?

    <div class="media">
    <a class="pull-left" href="#">
    <img class="media-object" src="http://i60.tinypic.com/118de6g.png" alt="">
    </a>
    <div class="media-body">

    // PRIMO RESULTSET
    <h4 class="media-heading"><%= rs3.getString (1)%>

    // SECONDO RESULTSET
    <small>Voti:<%= rs1.getString (1)%></small>
    </
    h4>

    //TERZI RESULTSET
    <%=rs2.getString (1)%>
    </div>
    </
    div>

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cobbra Visualizza il messaggio
    ma se il result set fosse uno solo, poi come faccio ad inserire ed a stampare nell'html finale il nome, il commento ed il voto in tre punti diversi?
    Allora: si evince dal tuo codice che ci sono (almeno) 3 informazioni nella tua tabella commenti: un "voto", un "commento" e un "utente" (li ho detti in senso generale, non con i nomi che hai usato realmente per le colonne).

    Se tu volessi creare nella pagina prima un elenco dei voti, poi un elenco dei commenti, poi un elenco degli utenti, allora sì, dovresti fare 3 select distinte, oltretutto nemmeno "annidate" (cioè totalmente slegate tra di loro). Probabilmente non avrebbe tantissimo senso ma è fattibile.

    Ma visto che le 3 informazioni rappresentano un "record", sono quindi correlate tra di loro. E pertanto sarebbe più sensato generare in output del markup HTML in modo da mostrare in gruppo ciascun singolo record. La cosa più ovvia sarebbe una <table> ma non è detto che l'output debba essere tabellare.

    Esempio 1:

    <table>
    <tr><td>voto1</td><td>commento1</td><td>utente1</td></tr>
    <tr><td>voto2</td><td>commento2</td><td>utente2</td></tr>
    .....
    </table>

    Esempio 2:

    ....
    <h4>utente1 <small>voto1</small></h4>
    <p>commento1</p>
    ....
    <h4>utente2 <small>voto2</small></h4>
    <p>commento2</p>
    ....

    I due esempi di output che ho fatto si possono generare tranquillamente con una sola select. Infatti lo "vedi" il blocco di HTML che si ripete e contiene i dati di ciascun record?
    Ultima modifica di andbin; 15-10-2014 a 21:48
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Allora: si evince dal tuo codice che ci sono (almeno) 3 informazioni nella tua tabella commenti: un "voto", un "commento" e un "utente" (li ho detti in senso generale, non con i nomi che hai usato realmente per le colonne).

    Se tu volessi creare nella pagina prima un elenco dei voti, poi un elenco dei commenti, poi un elenco degli utenti, allora sì, dovresti fare 3 select distinte, oltretutto nemmeno "annidate" (cioè totalmente slegate tra di loro). Probabilmente non avrebbe tantissimo senso ma è fattibile.

    Ma visto che le 3 informazioni rappresentano un "record", sono quindi correlate tra di loro. E pertanto sarebbe più sensato generare in output del markup HTML in modo da mostrare in gruppo ciascun singolo record. La cosa più ovvia sarebbe una <table> ma non è detto che l'output debba essere tabellare.

    Esempio 1:

    <table>
    <tr><td>voto1</td><td>commento1</td><td>utente1</td></tr>
    <tr><td>voto2</td><td>commento2</td><td>utente2</td></tr>
    .....
    </table>

    Esempio 2:

    ....
    <h4>utente1 <small>voto1</small></h4>
    <p>commento1</p>
    ....
    <h4>utente2 <small>voto2</small></h4>
    <p>commento2</p>
    ....

    I due esempi di output che ho fatto si possono generare tranquillamente con una sola select. Infatti lo "vedi" il blocco di HTML che si ripete e contiene i dati di ciascun record?

    perfetto ti ringrazio! credo di aver capito, mi sfugge solo la sintassi da utilizzare per avere il risultato che tu hai posto nella tabella. Chiaramente se scrivo "utente1, voto1" non mi darà nessun risultato forse metto <%= rs.getstring(voto)%> oppure <%= rs.getstring(commento)%> ??


    ed in merito al discorso WHERE hai qualche dritta da darmi??

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cobbra Visualizza il messaggio
    Chiaramente se scrivo "utente1, voto1" non mi darà nessun risultato
    Ovviamente .... io ho fatto solo esempi di output finale (quello che arriva al browser) ipotizzando valori voto1, voto2 ecc... per far capire quali sono i dati.

    Quote Originariamente inviata da cobbra Visualizza il messaggio
    forse metto <%= rs.getstring(voto)%> oppure <%= rs.getstring(commento)%> ??
    In generale: se fai la select con * è preferibile estrarre i valori usando label invece che indici (perché con * l'ordine delle colonne è quello dichiarato nella definizione della tabella e se dovesse cambiare .....).
    Se invece estrai colonne specifiche es. SELECT colonna1, colonna2, ......... allora è abbastanza indifferente se fai rs.getString(1) oppure rs.getString("colonna1")

    Quote Originariamente inviata da cobbra Visualizza il messaggio
    ed in merito al discorso WHERE hai qualche dritta da darmi??
    Cioè? Scusa ma io non posso avere la conoscenza dei concetti dietro la tua base dati. Quale è il dubbio o problema preciso?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ovviamente .... io ho fatto solo esempi di output finale (quello che arriva al browser) ipotizzando valori voto1, voto2 ecc... per far capire quali sono i dati.


    In generale: se fai la select con * è preferibile estrarre i valori usando label invece che indici (perché con * l'ordine delle colonne è quello dichiarato nella definizione della tabella e se dovesse cambiare .....).
    Se invece estrai colonne specifiche es. SELECT colonna1, colonna2, ......... allora è abbastanza indifferente se fai rs.getString(1) oppure rs.getString("colonna1")


    Cioè? Scusa ma io non posso avere la conoscenza dei concetti dietro la tua base dati. Quale è il dubbio o problema preciso?

    Carissimo
    ti volevo ringraziare per aver risolto il mio problema ... ero entrato in un while dal quale nno uscivo! grazie grazie!


    in merito al discorso del where all'interno della query, forse devo studiare un po e capire come inserire dei permalink relativi ad ogni nuovo topic, forse ti ridisturberò in ogni caso grazie ancora

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.