我希望在更新特定列时添加时间戳。
例如
Column1:一个值 dateColumn1:date column1已更新 column2:一个值 dateColumn2:date column2已更新
我使用函数getTimestamp(),但它似乎不起作用。
有人可以告诉我如何在PHP和MYSQL中执行此操作吗?
由于
答案 0 :(得分: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 Table1,包含您的真实表名,column1等,具有真实的列名。
另一种方法是比较php中的旧值和新值。例如。执行查询以获取旧数据,比较要检查的字段,然后对每个已更改的字段执行一次更新查询以设置新时间戳。
答案 1 :(得分:1)
UPDATE table
SET column1='new value', timestampcolumn=NOW()
WHERE ...
是一种方式。如果您不介意更改记录中的任何内容时更改时间戳,则使用本机“timestamp”字段类型,当插入或更改记录时,它将自动更新为“now”。
答案 2 :(得分:1)
我更喜欢使用MySQL函数NOW(),如下所示:
UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething
答案 3 :(得分: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 //