dポイントプレゼントキャンペーン実施中!

MYSQLにて(PHPMYADMIN上でテスト)

●レコード挿入(追加・新規作成)時は、
「Pt_create」と「Pt_update」の2つのフィールドに自動で現在時刻を作成

●レコード編集時は
「Pt_update」のみ自動で現在時刻を上書き

というありがちで申し訳ないですが、実行したいです。

現在調べたところ、

一番スマートでない方法は、
*******************************

Pt_createのほうに、種別:DATETIME
Pt_updateのほうに、種別:DATETIME

PHP側にて、$today = date("Y-m-d H:i:s");を取得して、

新規作成時・・・
$sql = INSERT INTO (`Pt_create`,`Pt_update`) VALUES ('".$today."','".$today."')・・

編集時・・・
$sql = UPDATE SET Pt_update= '".$today."'・・

*******************************
ですよね?


できたらSQLのほうで自動でやれるだけやってほしいのですが、
今は、
*******************************

Pt_createのほうに、種別:DATETIME
Pt_updateのほうに、種別:TIMESTAMP、属性:on update CURRENT_TIMESTAMP

PHP側にて、$today = date("Y-m-d H:i:s");を取得して、

新規作成時・・・
$sql = INSERT INTO (`Pt_create`) VALUES ('".$today."')・・

*******************************
ここまで省略できました。

これが限界でしょうか。
種別:TIMESTAMPを2つ設置したらうまく動作しなかったもので。

A 回答 (2件)

えっと、省略であれば後者でいいと思います。


ただ、timestmpとdatetimeはどちらも日付型で似たような物すが、厳密に言うと全く別の物です。
まず、サポートしている範囲が違います。
timestmp:'1970-01-01 00:00:00' ~ 2037 年の一定の時点
datetime:'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'
さらには消費バイトも違います。timestmpは4バイトでdatetimeは8バイト
もし、RDBMSに依存しないような作りにするのであればtimestmp型を使うのがいいですが・・
MySQLのtimestmpは特殊仕様なので、MySQLでは私はdatetime型を使ってます。timestmpは楽ですが・・MySQLが自動でやってくれちゃうので想定外とかありそうで怖いので・・
なので、前者の方法で突っ込むのが私のやり方ですね。
新規作成時・・・
$sql = INSERT INTO (`Pt_create`,`Pt_update`) VALUES (now(), now())・・
編集時・・・
$sql = UPDATE SET Pt_update= now()
    • good
    • 0
この回答へのお礼

ありがとうございます。

タイムスタンプが特殊仕様とはどういうことでしょう。
前者が遠回りなようで、実装されている人もいることをしり新たな発見でした。
どちらにしようか考えて見ます。

DATETIMEだとバイト数が2倍なのですね。
大規模DBの構築となると関係してきそうですね。
はやくそんなシステムを作る仕事ができたらいいですけど。

お礼日時:2011/05/13 23:06

TIMESTAMP型は1テーブルに1つですからね


Pt_createをdatetime,Pt_updateをtimestampにするので問題ないでしょう。

そもそもPHPで日付をつくらなくてもMySQLにだって現時刻をとる日付関数はあります

INSERT INTO (`Pt_create`) VALUES(NOW());
    • good
    • 0
この回答へのお礼

ありがとうございました!

Now()があるのですね。でも同じようなことする人多そうなのに、
なぜタイムスタンプは1テーブルに1個なのでしょうか。

お礼日時:2011/05/13 23:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!