2011-01-26 9 views
1

特定の列が更新されたときにタイムスタンプを挿入したい。例えばMySQL特定の列をPHPで更新するときのタイムスタンプ

列1:値 dateColumn1:値 dateColumn2:日付column1のは COLUMN2を更新された日付column2のは、私は機能getTimestamp()を使用しますが、そうでない

を更新しました動作するようです。

誰でもPHPとMYSQLでこれを行う方法について私にアドバイスできますか?

おかげ

答えて

1
UPDATE table 
SET column1='new value', timestampcolumn=NOW() 
WHERE ... 

は一つの方法です。レコード内の何かが更新されたときにタイムスタンプが変わっても気にしない場合は、ネイティブの「タイムスタンプ」フィールドタイプを使用します。レコードの挿入時または変更時に「now」に更新されます。

+0

これに関しては、これを見ても大したことはありません。http://dev.mysql.com/doc/refman/5.0/en/timestamp.htmlタイムスタンプフィールドタイプ。 – Christa

+0

タイムスタンプフィールドタイプは使用できません。日時を正しく使用する必要がありますか? –

+0

はい、TIMESTAMPは、行のANY更新時にフィールドを上書きします。あなた自身でそれを制御したい場合はDATETIMEを使います。 –

1

私はそうのように、NOW()MySQLの機能を使用して好む:あなたが唯一のデータベースでこれを実行したい場合は

UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething 
+0

列はDATETIMEまたはTIMESTAMPでなければなりませんか? –

+0

あなたのやりたいことに依存します:http://dev.mysql.com/doc/refman/5.0/ja/timestamp.html –

2

は、あなたがあなたの条件を確認し、必要に応じて、特定のタイムスタンプを更新トリガを書くことができます。しかし、私はあなたがトリガーを使いこなしたくないと仮定しています。トリガーには利点があります:PHPコードを書くことなく、行の古い値と新しい値にアクセスできます。

とにかく、場合にあなたはそれがここにトリガーのためのいくつかのサンプルコードである必要があります(SQLは、注意してください):

 

DELIMITER $$ 
DROP TRIGGER IF EXISTS Table1_UpdateTrigger $$ 
CREATE TRIGGER Table1_UpdateTrigger BEFORE UPDATE ON Table1 
    FOR EACH ROW BEGIN 
    IF OLD.column1 != NEW.column1 THEN 
    SET NEW.dateColumn1 = NOW(); 
    END IF; 
    IF OLD.column2 != NEW.column2 THEN 
    SET NEW.dateColumn2 = NOW(); 
    END IF; 
    END; 
$$ 
DELIMITER ; 
 

Substite表1を実際の列名を持つなど、あなたの本当のテーブル名、COLUMN1、と。

もう1つの方法は、PHPの古い値と新しい値を比較することです。例えば。古いデータをフェッチするクエリを実行し、確認するフィールドを比較して、新しいタイムスタンプを設定するために変更されたフィールドごとに1つの更新クエリを実行します。

0

条件文を使用します。たとえば、次のトリガーでは、「パスワードを変更した時刻」は、パスワード列に変更がある場合にのみ更新されます。

関連する問題