mysql - 如何使用 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
解决方案
您应该列出所有列,然后您可以设置值:
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;
推荐阅读
- rename - 用 case_when 重命名 R 中的因子水平
- python-3.x - 追加一个列表,直到达到大小限制,然后开始一个新列表
- python - skimage 在每个通道的 LAB 颜色空间中使用什么范围?
- javascript - 如何只获取数组的前 n%?
- c - rodinia 3.1 肌细胞基准中的奇怪结构
- react-native - 访问 Expo SQLite 数据库的物理存储
- vba - 为什么使用 print 写入 csv 文件会将一行分成两行?
- keycloak - 使用 openid (keycloak) 保护 micronaut 应用程序时“重定向过多”
- java - 不能同时运行两个着色器程序,但是单独使用时每个都可以正常工作
- office-js - Microsoft Outlook 插件中的自定义任务窗格标题