我正在尝试通过一个 SQL 查询(针对 MySQL)实现以下目标:
我想将一行从一个表移动到另一个表,同时更改它的两个值。
我可以在一次查询中实现吗? 我现在的 PHP 代码:
$value1a = "Old value for this column";
$value1b = "New value for this column";
$value2 = "value2";
$sql = "INSERT INTO table2 (date, value1b, value2, value3, value4)
SELECT (date, value1a, value2, value3, value4)
FROM table1
WHERE value1a=? AND value2=?
DELETE FROM table1
WHERE value1a=? AND value2=?";
$stmt = $DB->prepare($sql);
$stmt->execute(array($value1a, $value2, $value1a, $value2));
value2、value3 和 value4 保持不变。 “日期”应更改为当前日期(我之前为此使用了 SQL 函数“NOW()”)。 “value1b”是一个全新的值,具有不同的列名但具有相同的数据类型。
这可能就是答案吗?
$sql = "INSERT INTO table2 (date, value1b, value2, value3)
SELECT (value3, value4)
FROM table1
WHERE value1a=? AND value2=?
VALUES (NOW(), ?, value2, value3, value4)
DELETE FROM table1
WHERE value1a=? AND value2=?";
$stmt = $DB->prepare($sql);
$stmt->execute(array($value1a, $value2, $value1b, $value1a, $value2));
最佳答案
您的第一次尝试非常接近,但您只想稍微更改 SELECT 部分。您可以选择值的函数而不仅仅是原始值,因此您的 SELECT 部分看起来像
SELECT (NOW(), value1a, value2, value3, value4) FROM table1 ...
不过,这仍然不是一个完整的 SQL 语句,因为 DELETE 行是一个单独的语句。您无法一次完成 INSERT 和 DELETE。
为什么要在一条语句中完成呢?是因为你想让这两件事同时发生吗?如果是这样,您应该查看交易:这就是它们的用途。开始交易;做你的插入;做你的删除;然后提交事务。任何其他正在查看数据库的人都会看到整个事情以原子方式完成(换句话说,没有人会看到数据库中插入了行但另一行未被删除)。
关于php - 将数据移动到新表并添加新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367317/