首页 > 解决方案 > 如何使用 INSERT INTO --- SELECT 和新的时间戳?

问题描述

我正在一个跟踪学生信息的小型网站上工作,当有人对其中一个学生进行更新时,我想存档以前记录的副本,我知道这样做会复制当前数据。

"INSERT INTO archives SELECT * FROM students WHERE id = $id"

但是我想包含编辑的日期,所以我尝试了这个,但它产生了以下错误:

DBD::mysql::st execute failed: Column count doesn't match value count at row 1

"INSERT INTO archives SELECT * FROM students WHERE id = $id, archive_date = $new_date"

尝试以下查询 - 产生相同的错误

INSERT INTO archives  (val, val1, val2, val3, new_date) SELECT (val, val1, val2, val3, now()) FROM students  WHERE id = $id

标签: mysqlsql

解决方案


您应该列出所有列,然后您可以设置值:

insert into archives ( . . ., archive_date) -- col list here
    select . . ., now()    -- or whatever function you are using for the current time
    from students
    where id = ?;

记得传递id作为参数。

编辑:(基于对您问题的编辑)

INSERT INTO archives  (val, val1, val2, val3, new_date) 
    SELECT val, val1, val2, val3, now()    -- or whatever function you are using for the current time
    FROM students
    WHERE id = $id;

推荐阅读