Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Differenza di ore

  1. #1

    Differenza di ore

    Devo creare una funzione che calcoli la differenza di ore fra un timestamp e l'ora corrente.

    In un mio precedente script avevo utilizzato la funzione nativa di mysql datediff, solo che essa restituisce la differenza di giorni. Esiste il modo, sempre interrogando mysql di ottenere la differenza ore o devo creare una funzione apposta che esploda il timestamp?

  2. #2
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    devi utilizzare la funzione nativa di mysql: TIMEDIFF();


  3. #3
    Ok, perfetto.
    Dunque come sembra:
    Codice PHP:
    while($row mysql_fetch_array($esegui)){ // APRO LIVELLO 1
        
    $data $row['ora_iscrizione'];
        
    $query3 "SELECT timediff(NOW(), '$data')";
        
    $esegui3 mysql_query($query3,$db) or die("Errore nella query 3");
        
    $row3 mysql_fetch_array($esegui3);
        
    $diff substr($row3[0],0,2);
        
    //se superiore alle 6 ore cancello
        
    if($diff >= 6){
        
    $querydelete "DELETE FROM ISC_daconfermare WHERE gen_id='$row[gen_id]'";
        
    $eseguidelete mysql_query($querydelete,$db) or die("Errore nella cancellazione da Generale");
        }

    ?? Che ne dite?

  4. #4
    Scusate, nella fretta...
    Così è impreciso poichè anche se le ore fossero superiori a 99 lui troncherebbe e 110 diventerebbero 11. Qui serve un explode:

    Codice PHP:
    while($row mysql_fetch_array($esegui)){ // APRO LIVELLO 1 
        
    $data $row['ora_iscrizione']; 
        
    $query3 "SELECT timediff(NOW(), '$data')"
        
    $esegui3 mysql_query($query3,$db) or die("Errore nella query 3"); 
        
    $row3 mysql_fetch_array($esegui3); 
        
    $diff explode(":","$row3[0]");
        
    $diff $diff[0];
        
    //se superiore alle 6 ore cancello 
        
    if($diff >= 6){ 
        
    $querydelete "DELETE FROM ISC_daconfermare WHERE gen_id='$row[gen_id]'"
        
    $eseguidelete mysql_query($querydelete,$db) or die("Errore nella cancellazione da Generale"); 
        } 


  5. #5
    mi pare una grande complicazione....

    codice:
    DELETE FROM tabella
    where now() - interval 6 hour >= data_ora_iscrizione
    l'ora senza il giorno-mese-anno tra l'altro, porterebbe ad innumerevoli errori.

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

  6. #6
    'ora senza il giorno-mese-anno tra l'altro, porterebbe ad innumerevoli errori.
    Scusa che errori?

    E il codice scritto da te come diventerebbe?

  7. #7
    Originariamente inviato da lorenzos
    Scusa che errori?

    E il codice scritto da te come diventerebbe?
    una ora ricomincia da capo ogni 24 ore.... senza il giorno che calcoli faresti?

    il codice scritto da me sostituisce tutto quello che hai scritto.

    codice:
    $querydelete = "DELETE FROM ISC_daconfermare 
         WHERE now() - interval 6 hour >= data_ora_iscrizione 
         ";
    ti calcola la differenza e cancella le righe += vecchie di 6 ore.

    ovviamente il campo che io chiamo "data_ora_iscrizione" sara' un campo DATETIME oppure TIMESTAMP di MySQL

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

  8. #8
    Ma scusa, nel codice che ho scritto io viene chiesta a mysql la differenza in ore, lui restituisce ore minuti e secondi ( esempio 125:55:45). Io estrapolo le ore che in questo caso sono 125! Il giorno lo considero.

    Certo, tu fai fare tutto a mysql. Però a parte la quantità di codice non vedo grosse falle!

  9. #9

  10. #10
    Originariamente inviato da lorenzos
    Ma scusa, nel codice che ho scritto io viene chiesta a mysql la differenza in ore, lui restituisce ore minuti e secondi ( esempio 125:55:45). Io estrapolo le ore che in questo caso sono 125! Il giorno lo considero.

    Certo, tu fai fare tutto a mysql. Però a parte la quantità di codice non vedo grosse falle!
    beh, oh dio, guarda che ci sono falle colossali nella logica del codice

    Se col fetch tiri fuori 1000 righe vuol dire che minimo lanci 1000 sql di select e massimo 2000 di select e delete, di cui la seconda è MOLTO più pesante perché vanno aggiornati gli indici ad esempio

    Quindi vai da un minimo di N+1 query a N*2+1 query

    con il codice di piero con una sola query fai tutto

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.