2011-01-04 3 views
0

私の簡単な質問は.. PHPtime()の値をデフォルトでMYSQLデータベースの列に挿入することができるので、毎回挿入する必要はありません。私は、MySQLがCURR_TIMESTAMPを提供知っ..butそれらは整数として、タイムスタンプを与える時間関数とは異なり、整数として格納されていません。..MySQLデータベースのカラムにphp time()の値をデフォルトで挿入することはできますか?

すべてのヘルプは大歓迎されます...おかげ

+2

それは、データベースが「時間」の形式をサポートしているとき、整数として「時間」を保存するために本当に悪い癖です。あとで整数として本当に必要な場合は(そして何か他のものが壊れているのかもしれないという理由を尋ねる必要があります)、あなたはいつでもそれを変換することができます。 – Konerak

+0

実際には、データベースサーバのクロックとは対照的に、PHPが動作するサーバからの時間を参照していますか? –

+0

私はunixtimestampを持っています。私はクエリの間を実行する必要があります...そして、格納されたフォーマットがそうであれば、別の方法でクエリする必要があります – saikat

答えて

3

例:

drop table if exists file_events; 

create table file_events (
    id int unsigned auto_increment not null, 
    file_id int unsigned not null, 
    event_time int unsigned not null default UNIX_TIMESTAMP(), # the field that defaults to "now" 
    primary key(id), 
    constraint foreign key fk_file_events_to_sam_files (file_id) references files(id) on delete cascade 
) ENGINE=InnoDB; 
+0

'CURRENT_TIMESTAMP'と' NOW() 'はまったく同じなので、何も追加しません。 –

+0

@Matthew:あなたが正しいところでは、私の答えを編集しました.UNIX_TIMESTAMP()はOPが欲しかったものを返します。 –

+1

'timestamp'カラムは日付の唯一のタイプです。整数ではありません。 'UNIX_TIMESTAMP()'(*は*整数)の結果を格納しようとすると、 '0000-00-00 00:00:00'になります。 –

1

あなたは常にトリガーが[http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html]ちょうど現在のタイムスタンプにお好みの列を設定するためのトリガを作成使用することができますmysqlの拠点でそれをしたい場合は

+0

これは質問に与えられた有効な答えです。もちろん、適切な日付を格納し、 'UNIX_TIMESTAMP()'を使用して変換を行う方が理にかなっています。 –

0

あなただけのMySQLトンに固執すべきです必要に応じて変換します。

strtotime("put the mysql timestamp here"); 

は、他の多くのDBMSとは異なり、MySQLはデフォルト値としての機能をサポートしていません

time(); 
+0

well yes thats true ...私はunixtimestampを持っており、クエリの間を実行する必要があります。格納されたフォーマットがそうであれば、別の方法でクエリする必要があります... – saikat

+1

PHPの時間とMySQLの ' TIMESTAMP' *両方*はUNIXエポックから秒を表します。 MySQLの[概要](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-type-overview.html)を参照してください。 –

0

と同じ形式(Unixタイムスタンプ)を生成します...行うのは簡単です。唯一の例外は、あなたが言及したものです:日付はCURRENT_TIMESTAMP(またはその値の1つ)を受け入れます。

SELECT foo_id, foo_info 
FROM foo 
WHERE FROM_UNIXTIME(1294133369)<=foo_date 

あるいは、PHPから:

$sql = "SELECT foo_id, foo_info 
    FROM foo 
    WHERE '" . date('Y-m-d H:i:s', 1294133369) . "')<=foo_date"; 

何であれ、あなたは絶対に必要な場合、あなたが簡単にあなたのUnixタイムスタンプは、オンザフライで変換することができますので、とにかくそれは非常に受け入れ可能な解決策だ私には表示されます日付を整数として保存するには、独自のトリガーを作成する必要があります。ここでは良い例です:

http://mysqldatabaseadministration.blogspot.com/2006/01/playing-with-triggers.html

関連する問題