2011-01-26 5 views
1

Я хочу поставить отметку времени при обновлении определенного столбца.Временная метка MySQL при обновлении определенного столбца с помощью PHP

Например

column1: значение dateColumn1: Дата столбец1 была обновлена ​​ столбец2: значение dateColumn2: Дата столбец2 была обновлена ​​

использовать функцию getTimestamp(), но это не делает похоже, работают.

Может ли кто-нибудь посоветовать мне, как это сделать в PHP и MYSQL?

Благодаря

ответ

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

является одним из способов. Если вы не возражаете изменить временную метку в любое время, когда что-либо в записи обновляется, тогда используйте собственный тип поля timestamp, который будет обновляться до «сейчас», когда запись будет вставлена ​​или изменена.

+0

В связи с этим, вероятно, не мешало бы взглянуть на это: http://dev.mysql.com/doc/refman/5.0/en/timestamp.html, если вы планируете использовать тип метки времени. – Christa

+0

Так что я не могу использовать тип поля Timestamp, я должен использовать Datetime правильно? –

+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 ; 
 

подставляются Table1 с вашими именами реальной таблицы, column1 и т.д. с именами реального столбца.

Другой способ - сравнить старые и новые значения в 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 // 
Смежные вопросы