2012-03-20 13 views
1

データベースサーバーのエントリを更新するhtml/phpフォームがあります。エントリが追加されるタイミングを示すフィールドを各行に追加する必要があります。つまり、エントリが作成されたときのタイムスタンプです。私が検索し、発見されている本:データベーステーブルへのタイムスタンプの追加

http://www.createafreewebsite.net/phpmysql/alter.html

私のようなものだろう:

$timestamp = time(); 
mysql_query("ALTER TABLE notification 
ADD timestamp CHAR(30) AFTER names); 

mysql_query("INSERT INTO notification (`timestamp`) values ('$timestamp'); 

が、これはそれに近づくための正しい方法である、と私は、正しいデータ型を使用していますか?私は、タイムスタンプと、後でjavascriptファイルから生成された別のタイムスタンプとを比較する必要があります。たとえば、timestamp1がtimestamp2よりも小さい場合、次の関数を実行するよりも...

何か情報が役に立ちました、ありがとう!

EDIT:要求されたとして

提供される情報:

は、これまでのところ、私が持っている:

mysql_query("INSERT INTO notification (`program`, `month`, `day`, `year`, `sponsor`, `type`, `category`, `range`, `desc`) values ('$pName' , '$month' , '$day' , '$year' , '$sponsor' , '$type' , '$category' , '$range' , '$desc')"); 
+0

列を追加しようとしているテーブルの構造を投稿してもよろしいですか?その 'INSERT'文を使うと、テーブルの他のカラムにデータが挿入されることはなく、それらのうちの1つ以上が' NOT NULL'でデフォルトがなければ失敗します。 –

+0

私の現在の挿入行を追加しました – user1152440

答えて

4

time()は、MySQLのテーブルには、別の形式を期待しているかもしれない、タイムスタンプを生成します。

テーブルがCHAR(30)でも、使用する変数が1つ少なくなります。

列のデータ型をTIMESTAMPに変更すると、on update CURRENT_TIMESTAMPを使用して表のセルを埋めることができます。

+0

返信ありがとう、これは数値のタイムスタンプ、またはユーザーが読むことができる形式のものを生成しますか?私は実際には、 'Tue Mar 20 2012 09:02:49'の代わりに' 1332249169'のような数値的なタイムスタンプで簡単に数学的比較を行うと考えています。 – user1152440

+0

MySQLの日付形式を使用するのが最善です。PHPの – 472084

+0

ニースで 'strtotime()'を使ってタイムスタンプに簡単に変換できます。この 'strtotime()'もjavascriptでできますか?私は、データベースからテーブルのタイムスタンプ列を読み込み、現在の時刻と比較することを考えています。 – user1152440

1

タイムスタンプがtimestampデータ型を持つ必要があります。

mysql_query("INSERT INTO notification (`timestamp`) values (NOW()); 

、それはあまりにも、日付と日時フィールドで動作しますが:あなただけ行うことができますので、PHPでhttp://dev.mysql.com/doc/refman/5.0/en/datetime.html

1

日付またはタイムスタンプを格納するためにCHARまたはVARCHARデータ型の列を使用したくない場合は、後で比較が難しくなる可能性があります。また、timestamp列に既定値を設定して、行を挿入するときに自動的に入力されるようにするか、notificationテーブルの挿入トリガーを使用して入力を行うことを検討する必要があります。こうすることで、開発者のエラーの可能性が減少します。

CREATE TRIGGER notification_timestamp BEFORE INSERT 
    ON notification FOR EACH ROW 
BEGIN 
    SET new.timestamp = NOW(); 
END; 

構文が正しくない場合はお詫び申し上げます。

+0

投稿のためにありがとう、私はあなたが提案したことをしようとしていますが、私は非常にSQLには全く新しいです。どのように私はあなたのコードを使っていますか?これまでは、PHPコードでテーブルを追加したり編集したりしています。コードは、タイムスタンプを挿入する列をどのように知っていますか? – user1152440

+0

トリガでは、 'new'テーブルは挿入/更新されたデータを参照し、' old'テーブルは更新または削除されているデータを参照します。ですから 'SET new.timestamp = NOW()'を使ってMySQLに 'timestamp'カラムの値を設定するように指示しています(ちなみに、' timestamp'はデータ型であるため、現在の時刻( 'NOW()'は 'CURRENT_TIMESTAMP()'と同義です)を挿入し、挿入する行に使用します。 –

+0

だから、 'CREATE TRIGGER name_of_timestamp_col BEFORE INSERT''各テーブル行に対してON '' BEGIN' 'SET new.timestamp = NOW();' 'END;' – user1152440

関連する問題