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

    Problema con ciclo while

    Ciao a tutti, vengo subito al dunque cercando di essere il più chiaro possibile: ho un problema con un ciclo while che non mi da risultati sperati; premetto che la query è correttamente funzionante perchè in altre pagine mi visualizza i risultati come previsto..


    Allora, estraggo diversi record, dove ad ognuno ho associato una categoria:


    codice:
    record1 - gruppo 1
    record2 - gruppo 1
    record3 - gruppo 2
    record4 - gruppo 2


    Vorrei raggiungere il seguente risultato:


    codice:
    <gruppo>
    	<membro>
    		<nome>record1</nome>
    	</membro>
    	<membro>
    		<nome>record2</nome>
    	</membro>
    <gruppo>
    </gruppo>
    	<membro>
    		<nome>record3</nome>
    	</membro>
    	<membro>
    		<nome>record4</nome>
    	</membro>
    </gruppo>




    Sono arrivato ad impostare il ciclo così:


    codice:
    * query *
    …
    $xml .= '<gruppo>' . "\r\n";
    	while ($r = $raggruppamenti -> fetch())
    		{
    		$xml .= '<membro>' . "\r\n";
    			$xml .= '<nome>' . $r['record'] . '</nome>' . "\r\n";
    		$xml .= '</membro>' . "\r\n";
    		}
    $xml .= '</gruppo>' . "\r\n";


    Con il quale ottengo giustamente questo risultato:


    codice:
    <gruppo>
    	<membro>
    		<nome>record1</nome>
    	</membro>
    	<membro>
    		<nome>record2</nome>
    	</membro>
    	<membro>
    		<nome>record3</nome>
    	</membro>
    	<membro>
    		<nome>record4</nome>
    	</membro>
    </gruppo>


    Come potrei sistemare il ciclo? Ringrazio come sempre in anticipo per i preziosi aiuti!

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    metti nel while un contatore da 1 a 2, se sei al due inserisci il tag <gruppo> e resetti il contatore a 1, altrimenti no
    nel caso in cui i tuoi dati siano dispari, cosa fai? in teoria, se esci dal while con il contatore settato a 1 dovresti stampare <gruppo>, altrimenti vai dritto

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ti manca l'informazione che ti consente di dire a quale gruppo appartiene il membro.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    E' il caso di creare un altro while (riferito ad ogni gruppo) inserendo al suo interno il while di cui sopra?

  5. #5
    Ho creato una seconda query che estrapola solo i gruppi e ho settato il tutto così:

    codice:
    *query1*
    *query2*
    ...
    while ($rG = $gruppi1 -> fetch())
        {
            $xml .= '<gruppo>' . "\r\n";
    
            while ($r = $raggruppamenti -> fetch())
    
                {
                $xml .= '<membro>' . "\r\n";
                    $xml .= '<nome>' . $r['record'] . '</nome>' . "\r\n";
                $xml .= '</membro>' . "\r\n";
                }
    
    
        $xml .= '</gruppo>' . "\r\n";
    
    
        }
    Ottengo questo risultato:

    codice:
    <gruppo>
        <membro>
            <nome>record1</nome>
        </membro>
        <membro>
            <nome>record2</nome>
        </membro>
        <membro>
            <nome>record3</nome>
        </membro>
        <membro>
            <nome>record4</nome>
        </membro>
    </gruppo>
    <gruppo>
    </gruppo>

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ma i membri sono associati a dei gruppi ?

    Dovresti rendere la seconda query dipendente dal gruppo che stai utizzando.

    codice:
    *query1*
    ...
    while($rG = $gruppi1 -> fetch())
        {   
            *query2* where gruppo = $rG['gruppo']
           // Qui inserisci un test per passare solo se la query ha tornato qualcosa
           if (c'è almeno un record) {
            $xml .='<gruppo>'."\r\n";
    
            while($r = $raggruppamenti -> fetch())
    
                {
                $xml .='<membro>'."\r\n";
                    $xml .='<nome>'. $r['record'].'</nome>'."\r\n";
                $xml .='</membro>'."\r\n";
                }
    
    
            $xml .='</gruppo>'."\r\n";
    
            } // Qui fine del test
        }
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    io farei una query unica, con entrambe le informazioni
    poi un while sul risultato per mettere tutto in una query usando il campo gruppo come chiave e inserendo i record in un array collegato al gruppo (in pratica un array bidimensionale da scorrere per "formattarlo" in output)

    una cosa tipo
    codice:
    gruppo 1
       record 1
       record 2
    gruppo 2
       record 3

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Guarda allegato.
    File allegati File allegati
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Guarda allegato.
    Mi hai salvato la vita!!! infinitamente grazie!!

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.