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

    Insert con ciclo for su tabella mysql

    Ciao a tutti,
    ho un problema che non riesco a risolvere, con il seguente codice:
    ...
    for ($contatore=0; $contatore <= $dipendenti; $contatore++) { // ciclo elenco perid
    for ($contatore2=0; $contatore2 <= $gg_mese; $contatore2++) { // ciclo giorni mese

    $tmpDati = array(
    'perid' => $listaPERID[$contatore]['perid'],
    'data' => $listaMESE[$contatore2]['data_mese'],
    'gg_settimana' => $listaMESE[$contatore2]['giorno_settimana'],
    'categoria' => substr($listaMESE[$contatore2]['categoria'],0,3)
    );

    // Provo a salvare i dati del mese
    $tmpRis = $pntTrimestre->insertTrimestreMese($tmpDati);

    } //end For giorni mese


    echo ' **contatore2->> '.$contatore2;
    echo ' **dipendenti->> '.$contatore;

    } //end For PERID

    ...

    dovrei inserire in una tabella 142 * 31 = 4402 record, in pratica sono i 31 giorni del mese di maggio moltiplicato 142 dipendenti, il ciclo inizia senza problemi dopo che ha inserito 1521 record si blocca e non capisco dove sbaglio.
    qualcuno ha qualche idea o suggerimento al riguardo?

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    prova usando la funzione set_time_limit(), passando come argomento un numero molto alto, o 0 per non dare limiti, forse è un problema di timeout dello script.

    Ciao

  3. #3
    Grazie gianiaz,
    effettivamente nello script non vi è nessun controllo o altro per quando riguarda il time out.
    venerdì mattina mi metto all'opera, domani e festa mi dedico alla famiglia.
    Grazie di nuovo, Farò sapre gli sviluppi
    Luigi

  4. #4
    OK! alla grande tutti i record inseriti correttamente, ho alzato il max_execution_time a 120 secondi.

    Non essendo pratico non so se ho esagerato e le conseguenze che comporta.

    ho fatto questo semplice calcolo, con 30 secondi inserisce 1500 record moltiplicato per 3 ottengo 120 secondi 4500 record pertanto sono "coperto" (cervellotico come ragionamneto ).

    domanda: mysql durante l'esecuzione dello script risponde ad altre richieste???

    Un'ultima cosa, (ormai sono cotto :master: ) l'utente si trova la pgina bianca fin quando non vengono inseriti tutti i record, come faccio a far scorrere gli incrementi dei contatori a video durante l'attesa, anche per far capire che la macchina non si è inchiodata???
    Grazie, dell'aiuto.

  5. #5
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da lpsoft
    ho fatto questo semplice calcolo, con 30 secondi inserisce 1500 record moltiplicato per 3 ottengo 120 secondi 4500 record pertanto sono "coperto" (cervellotico come ragionamneto ).
    Bhe dipende anche dal carico della macchina, se in quel momento sta facendo altro potrebbe non essere sufficiente.
    domanda: mysql durante l'esecuzione dello script risponde ad altre richieste???
    Speriamo di si, altrimenti le applicazioni web non esisterebbero.

    A parte gli scherzi, è un operazione piuttosto pesante quella che stai facendo, e quindi potrebbero esserci dei rallentamenti (anche questo dipende da che tipo di macchina stai usando e di qual'è il suo carico in quel momento).

    Un'ultima cosa, (ormai sono cotto :master: ) l'utente si trova la pgina bianca fin quando non vengono inseriti tutti i record, come faccio a far scorrere gli incrementi dei contatori a video durante l'attesa, anche per far capire che la macchina non si è inchiodata???
    Grazie, dell'aiuto.
    2 possibilità:

    1. Demandi la creazione di questi record a uno script chiamato via ajax che crea N record, quando ottieni risposta mostri una barra di avanzamento, e richiami lo script che creerà altri N record ecc ecc ecc fino alla fine.

    2.Stesso metodo ma senza ajax, la pagina creerà N record, e con un tag meta fai il refresh aumentando la barra di avanzamento.

    Ora faccio una domanda io, perchè devi creare tutti questi record? e perchè tutti in una volta?

    ciao

  6. #6
    Originariamente inviato da gianiaz
    Bhe dipende anche dal carico della macchina, se in quel momento sta facendo altro potrebbe non essere sufficiente.

    Speriamo di si, altrimenti le applicazioni web non esisterebbero.

    A parte gli scherzi, è un operazione piuttosto pesante quella che stai facendo, e quindi potrebbero esserci dei rallentamenti (anche questo dipende da che tipo di macchina stai usando e di qual'è il suo carico in quel momento).

    (sono tranqillo) La macchina e posta su rete locale un 150 client collegati un solo client può fare questa operazione una volta al mese. le richieste sono pochissime perchè i client rivolgono le loro richieste su altri server remoti il server locale viene utilizzato per poche cose, (cpu Xeon 2 mb RAM diski scsi cof. Raid)

    Originariamente inviato da gianiaz

    2 possibilità:

    1. Demandi la creazione di questi record a uno script chiamato via ajax che crea N record, quando ottieni risposta mostri una barra di avanzamento, e richiami lo script che creerà altri N record ecc ecc ecc fino alla fine.

    2.Stesso metodo ma senza ajax, la pagina creerà N record, e con un tag meta fai il refresh aumentando la barra di avanzamento.
    riguardo ai 2 suggerimenti ci dovrò lavorare sopra, come avrai gia compreso non sono esperto, (mi sono imbarcato in questa storia che mi sta togliendo il sonno ), con ajax non saprei da dove comiciare, con il secondo metodo ci posso provare e che il: tag meta mi mette in difficolta: come lo tratto ??? fino ad adesso ho usato php e qualche script di java .


    Originariamente inviato da gianiaz


    Ora faccio una domanda io, perchè devi creare tutti questi record? e perchè tutti in una volta?
    Gestione servizi giornaliera con programmazione su base mensile, cioè l'ultima settimana del mese in corso si programma il mese successivo; poi giornalmente si stampa il servizio per il giorno dopo, ovviamente ci sono sempre delle modifiche da apportare queste pero riguradano il singolo record per il giorno dopo; (es. il dipendente fa pervenire il certificato medico per 5 giorni di malattia, l'operatore inserisce i dati del certificato e modifica i giorni interessati come "Congedo Straodinario per Malattia", sul servizio comparirà che il dipendente è assente per C.S.M.
    Spero di essere stato chiaro.


    P.S. non vorrei farti perdere del tempo, ti ringrazio per i suggerimenti, Luigi

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