Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Ciclo FOR e altro...

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    10

    Ciclo FOR e altro...

    Ciao a tutti!

    Ho un problema che mi da' noia da giorni.

    Da una prima tabella voglio estrapolare in modo univoco (con SELECT DISTINCT(nome_campo) i dati relativi ai gruppi di studenti. A priori non so come portrebbero chiamarsi e quanti siano.

    Nel listato sotto riportato ottengo il risultato corretto, riesco a scrivero dentro un file di testo ma NON RIESCO a catturare i dati per inserirli in una nuova tabella gruppi.

    Nell'esempio l'ultima query - quella che non funziona - è fuori da ogni ciclo e quindi riporta solo il primo dato. Ho provato a girarla in ogni salsa senza risultato.

    Quello che mi serve è catturare tutti i gruppi (in modo univovo) e portarli dentro una nuova tabella.

    Grazie per l'aiuto.

    Marco


    ---------
    <HTML>
    <BODY bgcolor="ffffcc">
    <?
    // file lista_gruppi.php

    include ("conf.inc.php");

    $sql = 'TRUNCATE TABLE `gruppi`';
    $query = mysql_query ($sql, $connessione) or die ("Problemi con l'azzeramento del DB");

    $sql = 'ALTER TABLE `gruppi` pack_keys=0 checksum=0 delay_key_write=0 auto_increment=1';
    $query = mysql_query ($sql, $connessione) or die ("Problemi con la riorganizzazione del DB");

    $sql = "select DISTINCT(txtnomegruppo) FROM $tabella";
    $query = mysql_query($sql, $connessione) or die ("Problemi con la visualizzazione della lista utenti");

    $num = mysql_num_rows($query);

    echo " $num record trovati
    ";

    echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\">
    <tr>
    <td width=\"10%\">Nome Gruppo</td>
    </tr>
    </table>";


    $fp = fopen('gruppi.txt','w');
    flock($fp,2);
    $acapo = chr(13).chr(10);
    fputs ($fp, "ELENCO GRUPPI$acapo");

    for ($i=0; $i<$num; $i++)
    {
    $gruppo = mysql_result($query, $i, "txtnomegruppo");

    echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\">
    <tr>
    <td width=\"10%\">$gruppo </td>
    </tr>
    </table>";

    fputs ($fp, "$gruppo$acapo");
    }

    $sql = "insert into gruppi (id, txtnomeGruppo) VALUES ('', '$gruppo')";
    $query = mysql_query ($sql, $connessione) or die ("Errore!!!");

    mysql_close($connessione);

    ?>
    </BODY>
    </HTML>

  2. #2
    metti l'insert e la query dentro il ciclo for....

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    10
    Haivoglia se ci ho provato e riprovato.... ma non funge!

    Grazie.

    Marco

  4. #4
    Originariamente inviato da parodix
    Haivoglia se ci ho provato e riprovato.... ma non funge!

    Grazie.

    Marco
    Non ho capito (son tosto) quello che devi fare....

    Cancelli una tabella.
    Fai un alter table che non serve perche' truncate te la rende nuova.
    Selezioni dei gruppi in modo univoco.
    fai un ciclo for quando un while sarebbe migliore.
    mysql_result non e' granche' meglio mysql_fetch_assoc()
    scrivi dentro ad un file e invece di usare \r\n crei una variabile per il return.
    Non chiudi il file.
    ed ora vuoi copiare "cosa??" dentro alla tabella cancellata prima.

    Se il tuo problema e' trasferire i dati nella nuova tabella perche' non usi INSERT ... SELECT ????



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

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    10
    Ciao,

    intanto ti ringrazio per la pazienza dimostrata.

    Dunue al di là dei formalismi e del codice ridondante scritto per appurare alcuni fondamenti provo a esporre la teoria per avere un riscontro che sia di tipo 'pratico' e verificabile.

    Io ho due tabelle, la prima contiene il campo 'txtnomeGruppi' che può essere inserito più volte e che devo estrarre, più volte nele tempo, in modo univoco. Se ho 50 nomi con scritto 'Amici Scuola' e 22 con scritto 'Gruppo Atletica Genova' questi mi devono essere restituiti come univoci, una sola volta e devono andare a finire nella seconda tabella che contiene analogo campo.
    Per questo ho pensato di usare SELECT DISTINCT(txtnomeGruppo) che sembra fare il suo sporco lavoro, tantè vero che il risultato viene elencato a video e va a finire in un file di testo.

    Quello che proprio non riesco a fare è l'INSERT dentro quel maledetto ciclo FOR che funziona se scrive su file ma non ne vuole sapere di scrivere sulla seconda tabella.

    Ovvio che questo è il mio limite, sono giorno che provo e riprovo e la frustrazione è grande.

    Ora provo a rispondere alle tue ossevazioni, punto per punto:

    ----- Cancelli una tabella. Fai un alter table che non serve perche' truncate te la rende nuova. ----

    Certo, ho bisogno di creare quella tabella più volte nel corso del tempo e ogni volta potrebbe essere diversa nel senso che potrebbe contenere dati che prima non erano stati inseriti. Vengono raccolti con una form online.


    ---- Selezioni dei gruppi in modo univoco. -----

    Devo poterlo fare (a mio avviso) magari sbaglio la logica di accesso al prbolema) come detto sopra.


    ----fai un ciclo for quando un while sarebbe migliore.
    mysql_result non e' granche' meglio mysql_fetch_assoc() -----

    Qui, il mio limite... mi rimetto alla tua pazienza e voglia di togliermi dai peidi....


    ----scrivi dentro ad un file e invece di usare \r\n crei una variabile per il return. ----

    Questa è la parte di prova, a rifore di logica deve sparire se trovo (troviamo, se mi aiuti) la soluzione corretta.

    ----- Se il tuo problema e' trasferire i dati nella nuova tabella perche' non usi INSERT ... SELECT ???? ------

    Perchè sono giorni e giorni che mi scorno senza successo.

    Ancora grazie,

    Marco P.

  6. #6
    comunque usate i CODE e PHP cavolo

  7. #7
    Per trasferire da una tabella all'altra i dati univoci:
    codice:
    $sql = "TRUNCATE TABLE `gruppi`"; 
    $query = mysql_query ($sql, $connessione) or die ("Problemi con l'azzeramento del DB"); 
    
    $sql1 = "insert into gruppi (textnomegruppo)
             select DISTINCT(txtnomegruppo) 
             FROM $tabella"; 
    
    $query1 = mysql_query($sql1, $connessione) 
              or die ("Problemi con la copia della lista utenti ". mysql_error() ); 
    
    $sql2 = "SELECT * FROM gruppi";
    $query2 = mysql_query($sql2, $connessione);
    while ( $row = mysql_fetch_assoc($query2)) {
            echo "$row[id] => $row[textnomegruppo] 
    " ;
            }
    al massimo dello stringato e senza troppi controlli vedi se funziona e se trasferisci i dati.

    Sono tre query, drop tabella, copia del campo txtnomegruppo, verifica dei dati trasferiti.


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

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    10
    OK, intanto uso il codice e mi scuso per non averlo fatto prima.

    Funziona mi prende i dati e me li porta nella nuova tabella che risulta però sconosciuta (???) quando devo contare quante sono le persone che hanno quel particolare nome di gruppo

    codice:
    $sql3 = "insert into gruppi (persone)
             select COUNT(txtnomeGruppo) 
             FROM $tabella WHERE gruppi.txtnomeGruppo = maremonti.txtnomeGruppo "; 
    $query3 = mysql_query($sql3, $connessione) 
              or die ("Problemi con la copia della lista utenti ". mysql_error() );
    Come faccio a dirgli di contare tutti quelli che nella tabella maremonti hanno lo stesso nome del primo record della tabella gruppi e così via? Una volta che ho automatizzato la procedura lo script è terminato.

    naturalmente, quello da me proposto non funziona...



    Grazie per la INFINITA pazienza..

    marco

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    10
    Naturalmente li deve contare i inserire nel campo 'persone' della tabella gruppi di cui sopra.
    intanto io provo e riprovo, non si sa mai che da questa zucca esca l'unico neurone rimasto a mezzo servizio.

    marco

  10. #10
    Originariamente inviato da parodix
    Come faccio a dirgli di contare tutti quelli che nella tabella maremonti hanno lo stesso nome del primo record della tabella gruppi e così via? Una volta che ho automatizzato la procedura lo script è terminato.
    Credo si possa fare gia' con la seconda query.
    codice:
    $sql1 = "insert into gruppi (textnomegruppo, persone)
             select txtnomegruppo, count(*) as persone
             FROM $tabella
             group by txtnomegruppo
             ";

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

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.