2011-01-26 34 views
1

我想在更新特定列時放置時間戳。用PHP更新特定列時的MySQL時間戳

例如

列1:值 dateColumn1:日期COLUMN1被更新 列2:值 dateColumn2:日期列2進行了更新

我使用功能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將在該行的任何更新上覆蓋該字段。如果您想自己控制,請使用DATETIME。 –

1

我更喜歡使用MySQL的函數NOW(),像這樣:

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

列是否必須是DATETIME或TIMESTAMP? –

+0

取決於你想要做什麼:http://dev.mysql.com/doc/refman/5.0/en/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與你的真實的表名,列1等與真正的列名。

另一種方法是比較php中的舊值和新值。例如。做一個查詢獲取舊數據,比較你想檢查的字段,然後對每個已更改的字段執行一次更新查詢以設置新的時間戳。

0

使用條件語句。例如,在以下觸發器中,只有當密碼列有更改時,纔會更新「密碼更改時間」。

CREATE TRIGGER update_password 
    BEFORE UPDATE ON users 
    FOR EACH ROW 
    BEGIN 
    IF OLD.password <> NEW.password THEN 
    SET NEW.password_changed_on = NOW(); 
    END IF; 
    END //