我有一个带有一些行的临时表:
$query = "CREATE TEMPORARY TABLE {$tn} (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(255) NOT NULL,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB";
我想选择这个表中的每一行,nulify id,更新'type'(例如)并将整个选中的行插入到另一个表中(它与这个表具有相同的列)。
我试过了,但是在set附近出现了一个错误(你的sql语法有一个错误;检查与您的mariadb服务器版本相对应的手册,以了解使用“set”附近的正确语法
foreach ($ids as $id) {//this is each id in temp table
$query = "INSERT INTO $another_table
SELECT * FROM {$tn} WHERE id='$id'
SET id=NULL, type='foo'";
$result = $conn->query($query) or die(mysqli_error($conn));
}
4条答案
按热度按时间vmdwslir1#
sql无效,您的insert语句中包含set语句。
所有你需要的是一个基本的插入选择这也是不需要for循环。
插入到另一个表(id,type,title)中,从{$tn}中选择id,'foo',title
您可以在插入所有行之后将set语句作为一个更新来执行,如果这更容易让您了解的话。
更新$another\u table set id=null
https://dev.mysql.com/doc/refman/8.0/en/insert-select.html
nbnkbykc2#
我不是phpMaven,但这是您应该遵循的语法。您可以从表中选择任意数量的常量。
这假设另一个目标表的列使用与第一个表相同的名称。如果没有,那么您必须更改我的查询的第一行。
请注意,您最好在这里使用一个准备好的语句。
wooyq4lh3#
如果两个表的列数相同,顺序相同,并且希望避免列出每一列,则可以复制条目并更新同一事务中更改的值:
但也许你应该概述一下,你想要达到的目标是什么?有两个相同列的表“闻起来”像是糟糕的设计。也许您最好使用同一个表以及数据行的修订号?
41zrol4v4#
如果你想的话,我会告诉你的
SET
运行此查询的表中具有相同列名的许多或所有列information_schema
将为您生成代码中最乏味的部分: