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

    MySQL: TimeStamp in UPDATE

    Ciao
    ho un campo formato timeStamp(14) e in phpAdmin è settato così:



    Se faccio un INSERT il campo mi viene salvato secondo le specifiche UNIX e cioè 20010101011430

    Se poi sullo stesso campo faccio un UPDATE il campo mi diventa così:
    20040906182024 (dal quale è facile evincere la data 2004-09-06 18:20:24)


    come mai ottengo risultati diversi tra l'INSERT e l'UPDATE ?

    Questi sono i rispettivi codici:
    codice:
    $sqlquery = "INSERT INTO $TBL_thread(serialdata, data, user, titolo) VALUES(UNIX_TIMESTAMP(NOW()),'$data','$fieldUser','$fieldTitolo')";
    
    
    $sqlquery = "UPDATE Thread_" .$forumid ." SET reply=reply+1, serialdata=UNIX_TIMESTAMP(NOW()) WHERE id=$ID_thread";
    Questa incongruenza non mi ordina i record per data.

    Mi date una mano, grazie
    IMPOSSIBLE IS NOTHING - LOOK BEFORE YOU LEAP !!!

  2. #2
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,743
    l'update sovrascrive i dati precedenti,
    togli dalla query

    serialdata=UNIX_TIMESTAMP(NOW())

    se vuoi mantenere intatta la data di inserimento

    e inserisci un altro campo se ti serve la
    data di ultima modifica che appunto updati
    con il timestaamp
    Errare humanum est, perseverare ovest

  3. #3
    Ciao, grazie per l'indicazione.
    Ho già due campi date: uno per Insert e l'altro per Update,
    ma ho preferito non adottare + il TimeStamp ma il formato DATETIME, dal quale posso anche ricavare informazioni temporali più facilmente che col precedente.

    E' ovvio che sto facendo ancora delle prove ma al momento risponde bene e riesco ad ottenere la lista ordinata secondo le mie intenzioni.

    Grazie ancora
    IMPOSSIBLE IS NOTHING - LOOK BEFORE YOU LEAP !!!

  4. #4
    ....
    dimenticavo ho fatto questa modifica:
    codice:
    
     $sqlquery = "INSERT INTO $forum (idthread, serialdata, data, user, titolo, topic) VALUES('$ID_thread',NOW(),(date_format(NOW(),'%d-%m-%Y% %H:%i:%s')),'$fieldUser','$fieldTitolo','$fieldTopic')";
    
    in questo modo ho formattato la data:

    (date_format(NOW(),'%d-%m-%Y% %H:%i:%s'))
    IMPOSSIBLE IS NOTHING - LOOK BEFORE YOU LEAP !!!

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,743
    ma formattando così la data non è ke
    poi sballi l'ordinamento?

    per me sarebbe meglio usare solo datetime(now) e
    la formattazione corretta la sistemi in fase di output
    con una funzioncina ad ok.
    Errare humanum est, perseverare ovest

  6. #6
    Ciao.

    Mi pare ci sia un po' di confusione con il timestamp.

    Quello che tu chiami campo "serialdata" timestamp(14) NON e' una data UNIX TIMESTAMP, ma MySQL TIMESTAMP in formato yyyymmddhhmmss.

    (date_format(NOW(),'%d-%m-%Y% %H:%i:%s')) non ti rende una data, ma una stringa di cui sara' poi ben complesso fare ordinamenti.

    Il campo "serialdata" sara' aggiornato in automatico ad ogni UPDATE. Basta non citarlo.

    Ti suggerisco di leggere la prima parte della pillola date/time. Visto che fai prove potra' esserti utile.

    http://forum.html.it/forum/showthrea...hreadid=459634

    ciao.

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

  7. #7
    Originariamente inviato da carlo2002
    ma formattando così la data non è ke
    poi sballi l'ordinamento?

    per me sarebbe meglio usare solo datetime(now) e
    la formattazione corretta la sistemi in fase di output
    con una funzioncina ad ok.
    Ottimo suggerimento...

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

  8. #8
    ciao,
    in effetti un pò di confusione ne ho fatta dovuto anche al mio primo approccio con un db MySQL. Tuttavia la situazione non mi impedisce di riprovare. Da quello che ho letto nella guida e da quello che mi hai detto tu, mi sembra di aver capito, che non bisogna aggiornare un campo TIMESTAMP.

    Altro incoveniente utilizzando PhpMyAdmin e' il caso di un update di un campo con valore identico all'esistente e con presenza nella tabella di un campo formato TIMESTAMP. Se non ci sono righe da modificare non si deve aggiornare il valore del campo frm. TIMESTAMP. PhpMyAdmin invece aggiorna il campo e restituisce una riga modificata. Questo non succede immettendo i valori dalla finestra QUERY.


    Aiutami a capire una cosa:

    devo ordinare dei records per data, compreso l'orario completo di secondi. Rinunciando al Timestamp ho utilizzato un campo DATETIME nel quale salvo NOW(), a prescindere dalla formattazione che ho utilizzato, non è un sistema valido per eseguire un ordinamento ?

    Allo stato attuale servendomi di quest'ultimo sistema riesco ad ordinare la mia lista, ma come avevo già detto mi trovo in una situazione sperimentale, perché non vorrei mai, si presentasse un giorno un bug.

    Quindi, ti chiedo un consiglio, visto che sei più pratico e ti pongo la domanda se tornare al TimeStamp o al campo DateTime.

    codice:
    $sqlquery = "SELECT * FROM $TBL_thread ORDER BY priority DESC, serialdata DESC LIMIT $fromRecord, $forPage";
    dove serialdata è salvato in questo modo:

    2004-09-07 16:25:00 (campo DATETIME)
    IMPOSSIBLE IS NOTHING - LOOK BEFORE YOU LEAP !!!

  9. #9
    Il campo DATETIME, popolato con la funzione NOW() e' validissimo per fare l'ordinamento se il formato e' quello inserito con NOW().

    I valori di una data vanno espressi come si fa per i numeri, Dal valore minore a sx, al maggiore a dx.

    yyyy-mm-dd hh:mm:ss , mentre immettere una data dd-mm-yyyy, intanto non e' una data ma una stringa, ed equivale ad immettere un numero con i singoli valori in ordine errato....

    Il timestamp ha "la caratteristica" di .... eccetera. Se non ti serve "quella" caratteristica non usarlo.


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