Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Se ti va leggiti queste pillole di piero.mac, datate ma sempre utilissime.

    http://forum.html.it/forum/showthre...threadid=459634
    http://forum.html.it/forum/showthre...threadid=839754
    Ho provato a leggerle ma credo che sono troppo difficili per il mio livello di conoscenze attuali.

    Tuttavia su html.it a questa pagina
    ho letto:
    In un TIMESTAMP possono essere memorizzati i valori corrispondenti al timestamp Unix, che vanno dalla mezzanotte del 1° gennaio 1970 ad un momento imprecisato dell'anno 2037.

    Questo tipo di dato è utile per memorizzare automaticamente il momento dell'aggiornamento di una riga di tabella: infatti MySQL può impostare in automatico una colonna TIMESTAMP di una tabella nel momento in cui viene effettuata una INSERT o un UPDATE. La visualizzazione del timestamp avviene nello stesso formato del DATETIME; è possibile ottenerlo in formato numerico aggiungendo un +0 alla colonna nella SELECT.


    Quindi se ho capito bene il mio "insert into... $time..." è superfluo dato che questo campo si aggiorna automaticamente ad ogni operazione. Premesso che io creo le tabelle con il supporto di phpmyadmin devo impostare qualcosa in particolare per attivare questa funzionalità (tipo spuntare Auto incremet o cose del genere...)?

    Oppure sono proprio fuori strada?

  2. #12
    un po' di confusione c'e'.

    un campo TIMESTAMP di mysql vienne memorizzato in formato ANSI e cioe'

    yyyy-mm-dd hh:mm:ss

    Un campo timestamp in formato UNIX, cioe' quello che ottieni con

    $time=time();

    e' invece un numero che rappresenta i secondi trascorsi a partire dal 01-01-1970 e va memorizzato in un campo numerico. Lo stesso valore scritto in modo diverso.

    Quindi il tentativo di comparare un TIMESTAMP UNIX con un TIMESTAMP ANSI lo possiamo definire come una comparazione impossibile.

    Se non ti serve l'ora memorizza la data in campo DATE, se ti serve anche l'ora usa un campo DATETIME, e non usare il timestamp se la data non deve essere automaticamente aggiornata.

    In un TIMESTAMP possono essere memorizzati i valori corrispondenti al timestamp Unix, che vanno dalla mezzanotte del 1° gennaio 1970 ad un momento imprecisato dell'anno 2037.
    l'affermazione della guida in questa parte parla di valori "corrispondenti" al timestamp UNIX non dice mica che saranno dello stesso formato, ma solo che il valore ottenuto dal TIMESTAMP di mysql corrisponde a quello ottenuto dal timestamp unix.

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

  3. #13
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    piero qui stai contribuendo anche tu alla confusione.

    Non ha senso parlare di "formato di memorizzazione", perché la rappresentazione interna dei dati è un problema che riguarda il server, non gli utenti.
    In ogni caso, un timestamp mysql è un timestamp unix a tutti gli effetti, perché se provi ad inserire una data inferiore al 1970 non te la prende. Quindi è più che verosimile che venga memorizzata come un intero. Che poi per default te la mostri in formato ANSI, è un altro discorso. Il formato di visualizzazione è comunque sempre manipolabile

  4. #14
    Originariamente inviato da luca200
    piero qui stai contribuendo anche tu alla confusione.

    Non ha senso parlare di "formato di memorizzazione", perché la rappresentazione interna dei dati è un problema che riguarda il server, non gli utenti.
    In ogni caso, un timestamp mysql è un timestamp unix a tutti gli effetti, perché se provi ad inserire una data inferiore al 1970 non te la prende. Quindi è più che verosimile che venga memorizzata come un intero. Che poi per default te la mostri in formato ANSI, è un altro discorso. Il formato di visualizzazione è comunque sempre manipolabile
    Il limite del range uguale non significa che i valori espressi in chiaro siano gli stessi. si possono fare gli stessi auguri come Buon Natale e Marry Christmas ma se compari:

    where 'Buon Natale' = 'Marry Christmas'

    Non avrai soddisfazione.

    Quindi si, contengono lo stesso valore, ma espresso in termini differenti non comparabili direttamente tra di loro se non tramite specifiche funzioni. Questo e' il problema di oly1982. Non puo' fare:

    where timestamp_mysql = timestamp_unix

    Direi che il formato di memorizzazione riguarda non il server che si limita a fare cio' che gli viene imposto, ma gli utenti che devono sapere che:

    2010-01-01 00:00:00

    e' la stessa cosa che scrivere:

    1262300400

    ma il server non lo sa. La prima e' una data-ora la seconda un numero.

    Questa roba quindi non funzionera' mai cosi' come e' scritta:

    /***QUERY DI CANCELLAZIONE*/
    $query2="delete from ".$db_tabella." where time<".$time-259200."";

    ovvio che esistono le funzioni per la traduzione del formato, ma le deve indicare esplicitamente l'utente.

    Se provi a memorizzare una data unix timestamp in un campo TIMESTAMP ANSI previsto in formato DATETIME il risultato ottenuto sarebbe una data nulla oppure una data di fantasia se per caso i numerelli del unix timestamp significassero qualcosa come data ANSI.

    Spiacente se prima non sono stato chiaro.

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

  5. #15
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Detta così, sono d'accordo con te.

    Il tuo "memorizzato in formato ANSI" intendeva che glielo devi dare in formato ANSI. Avevo interpretato in un altro modo

  6. #16
    (mi metto quasi vergogna a rispondere ) quindi venendo al mio problema...

    ad ogni inserimento inserisco nel campo "timer" quello che mi esce da time(), dove il campo "timer" sarà un semplicissimo campo di tipo INT.
    Per cancellare i record più vecchi mi basterà fare

    "delete from tabella where timer < curdate() - interval 3 day";

    oppure

    "delete from ".$db_tabella." where time<".$time-259200."";


    giusto?

  7. #17
    Tagliamo la testa al to... alla JUVE.

    la data mettila in un campo, chiamiamolo timer, in formato DATE.

    Lo valorizzi usando la funzione di mysql curdate() e cosi' ti avanzi una riga di codice php:

    insert / update ...campo timer = curdate().

    Per cancellare i record di oltre 3 giorni:

    delete from tabella where timer < curdate() - interval 3 day


    curdate() rende la data odierna nel formato ANSI yyyy-mm-dd. Quindi non serve usare time() e/o date() del php.


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

  8. #18
    forse forse ho capito...
    il campo timer deve essere di tipo DATE e inserisco i valori con la funzione di mysql curdate() mentre cancello where timer<curdate - interval 3 day

    Questo è quello che ho capito...

    Codice PHP:
    <?php 
    $campo1
    =addslashes($_POST['campo1']); 
    $campo2=addslashes($_POST['campo2']); 
    $campo3=addslashes($_POST['campo3']); 

    include (
    "conn.php"); 
    global 
    $db_host$db_user$db_password$db_database

    $db_tabella "nome_tabella"
    $connessione mysql_connect($db_host,$db_user,$db_password) or die ("connessione non riuscita"); 

    /***QUERY DI INSERIMENTO*/ 
    $query1="insert into ".$db_tabella."(campo1, campo2, campo3, timer) values('".$campo1."', '".$campo2."', '".$campo3."', curdate())" 
    mysql_db_query($db_database,$query1,$connessione); 

    /***QUERY DI CANCELLAZIONE*/ 
    $query2="delete from ".$db_tabella." where timer<curdate() - interval 3 day";         
    mysql_db_query($db_database,$query2,$connessione); 

    ?>

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