Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [php-mysql] UPDATE, strano problema

    ciao ragazzi, ho uno strano problema con UPDATE: ho un db popolato e ho bisogno di cambiare i valori di un campo in ogni record della tabella (il campo è ore_tot che sarebbe il calcolo del campo 4 e del campo6 che ritorna un periodo di tempo: es 4:32:00). Il fatto è che l'operazione fra i campi funziona correttamente (ritorna il valore corretto per ogni record) ma nel momento in cui faccio l'UPDATE questo valore non è piu lo stesso (ma torna ad esserlo anche dopo l'UPDATE VVoVe: ). Il valore che mi vien inserito all'interno del db è una cosa apparentemente senza senso (sempre un orario però) uguale per tutti i record che hanno in comunune il campo 1 (operaio) quindi nel db risulta una cosa del tipo

    id, simone, ..., ..., 12:00:00, ..., 15:00:00, ..., 00:14:00;
    id, simone, ..., ..., 15:00:00, ..., 16:00:00, ..., 00:14:00;
    id, paolo, ..., ..., 12:00:00, ..., 15:00:00, ..., 00:16:15;
    id, paolo, ..., ..., 10:00:00, ..., 15:00:00, ..., 00:16:15;


    come potete vedere l'ultimo campo è uguale raggruppato per operaio... mentre dovrebbe essere nell'ordine 03:00:00, 01:00:00, 03:00:00, 05:00:00

    Dove sbaglio? Aiuto, sto impazzendo!



    codice:
    <?php
    session_start();
    require("config.php");
    require_once 'header.php';
    require ("functions.php");
    
    $ricerca = "SELECT * FROM operazioni";
    $risultato_ricerca = mysql_query($ricerca) or die(mysql_error());
    WHILE ($risultato_ricerca_row = mysql_fetch_row($risultato_ricerca)){
    $h1 = $risultato_ricerca_row[4];
    $h2 = $risultato_ricerca_row[6];
    list($ore1, $minuti1) = explode(":", $h1);
    list($ore2, $minuti2) = explode(":", $h2);
    $ts1 = mktime($ore1, $minuti1, 0,1,1,1970,0);
    $ts2 = mktime($ore2, $minuti2, 0,1,1,1980,1);
    $result = date('H:i', ($ts2-$ts1));
    echo $result;
    $modifica = "UPDATE operazioni 
    SET ore_tot='$result' WHERE operaio = '$risultato_ricerca_row[1]'";
    mysql_query($modifica) or die(mysql_error());
     echo $result; 
    
    
    }
    
    
    ?>
    www.zukimania.org

  2. #2
    personalmente ho capito praticamente nulla.

    Ma se quello che vuoi fare e' la differenza tra due orari allora usa TIMEDIFF().

    es.:

    select TIMEDIFF('15:00:00', '12:00:00') as diff

    ti dara' come risultato 03:00:00.


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

  3. #3
    cacchio... grazie del consiglio ma il mio problema è un altro. la differenza fra le ore funziona è l'UPDATE che mi da noie... ho provato la tua soluzione, non conoscevo la funzione e devo dire che snellisce parecchio... non c'e nessun'altro che mi puo aiutare? rispiego brevente: una volta calcolata la differenza fra le date col update devo modificare tutti i record con il valore corrispondente (record 1 valore 1 record due valore 120 record 3 1233421 ecc) ma al momento non ci riesco, il valore che mi mette non è la somma che ho calcolato.. ciao
    www.zukimania.org

  4. #4
    Originariamente inviato da simoneudine
    cacchio... grazie del consiglio ma il mio problema è un altro. la differenza fra le ore funziona è l'UPDATE che mi da noie... ho provato la tua soluzione, non conoscevo la funzione e devo dire che snellisce parecchio... non c'e nessun'altro che mi puo aiutare? rispiego brevente: una volta calcolata la differenza fra le date col update devo modificare tutti i record con il valore corrispondente (record 1 valore 1 record due valore 120 record 3 1233421 ecc) ma al momento non ci riesco, il valore che mi mette non è la somma che ho calcolato.. ciao
    fai finta che il post sia di qualcun altro. Leggilo e dimmi cosa avresti capito.

    quello che ti ho suggerito prima per il select funziona anche per l'UPDATE.

    UPDATE operazioni
    SET ore_tot = TIMEDIFF(campo_fine, campo_inizio)

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

  5. #5
    chiedo scusa, obiettivamente non è molto chiaro.

    adesso ho provato a scrivere cosi

    codice:
    UPDATE operazioni SET ore_tot=TIMEDIFF('ore-fine','ore-inizio') WHERE operaio = operaio = '$risultato_ricerca_row[1]'";
    ma mi rimane il solito problema


    invece di scrivermi la vera differenza (ad esempio 10:00:00) mi scrive un valore senza senso...


    ripeto, lo fa solo nel db, se stampo il risultato di TIMEDIFF mi scrive il valore corretto...

    di nuovo scusatemi per il mio italiano ma questo problema mi ha logorato
    www.zukimania.org

  6. #6
    ho letto velocemente l'ultima query che hai postato.
    Prova con:
    codice:
    UPDATE operazioni SET ore_tot=TIMEDIFF(ore-fine,ore-inizio) WHERE operaio = '$risultato_ricerca_row[1]'";
    Penso che ore-fine e ore-inizio siano 2 campi del DB, quindi non devi mettere gli ', inoltre c'era scritto 2 volte 'operaio ='.

    Vedi un pò se va

    Ciao
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  7. #7
    no, era un mio errore nel copiare qui sul forum (lo script è su un altro pc..). comunque ho provato anche a togliere gli ' e fa esattamente la stessa cosa. comincio a pensare che sia impossibile!
    www.zukimania.org

  8. #8
    Originariamente inviato da simoneudine
    no, era un mio errore nel copiare qui sul forum (lo script è su un altro pc..). comunque ho provato anche a togliere gli ' e fa esattamente la stessa cosa. comincio a pensare che sia impossibile!
    cosa significa la stessa cosa? Se tu vuoi creare un campo calcolato non serve fare select + gli altri ambaradan. Basta l'UPDATE. Ovviamente per sapere "come" e "cosa" vorresti fare servirebbero indicazioni piu' precise.

    Facciamo finta che vuoi aggiornare il campo ore_tot con la quantita' di ore intercorse tra ora_inizio ed ora_fine. Occhio che si presume l'orario nell'ambito dello stesso giorno e non a cavalcioni di due o piu' giorni. la query:

    codice:
    update tabella
    set ore_tot = timediff(ora_fine, ora_inizio)
    where ore_tot IS '00:00:00'
    Se non va, spiega "cosa", "perche'" non va.

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

  9. #9
    si ma devo farlo per ogni record della tabella (gia popolata da tot righe contenente operai diversi, operazioni diverse, orari diversi) di conseguenza il valore di ora-inizo e ora-fine sarà sempre diverso. Facevo la SELECT per recuperare proprio quei valori... quindi update fatta in questo modo non saprebbe dove lavorare, giusto?
    www.zukimania.org

  10. #10
    Originariamente inviato da simoneudine
    si ma devo farlo per ogni record della tabella (gia popolata da tot righe contenente operai diversi, operazioni diverse, orari diversi) di conseguenza il valore di ora-inizo e ora-fine sarà sempre diverso. Facevo la SELECT per recuperare proprio quei valori... quindi update fatta in questo modo non saprebbe dove lavorare, giusto?
    azz.... l'update fatto a quel modo sa esattamente dove deve lavorare. Su tutti i record ore_tot che sono ancora a zero.

    Se invece vuoi ricalcolare tutto la tabella a prescindere dai record gia' calcolati, non mettere il where. Fai una tabella di prova e cimentati con la query update.

    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.