Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在两个表之间复制值的解决方案,而不使用类型all结构_Php_Mysql - Fatal编程技术网

Php 在两个表之间复制值的解决方案,而不使用类型all结构

Php 在两个表之间复制值的解决方案,而不使用类型all结构,php,mysql,Php,Mysql,我使用这个代码 update contracts a, contracts_history b set a.name_surname=b.name_surname 我的表有64列,我正在寻找一种不必指定列名就可以复制所有数据的解决方案—如下所示: $sql = "INSERT INTO `contracts_history` SELECT * FROM `contracts` WHERE id='$contract_id'"; 您可以使用insert-into

我使用这个代码

update 
contracts a, 
contracts_history b 
set 
a.name_surname=b.name_surname 
我的表有64列,我正在寻找一种不必指定列名就可以复制所有数据的解决方案—如下所示:

 $sql = "INSERT INTO `contracts_history` 
         SELECT * FROM `contracts` WHERE id='$contract_id'";

您可以使用
insert-into-select…
语法,只要表的字段数与匹配的数据类型完全相同,否则您必须使用列名来指定要复制的内容

我只是运行以下示例,向您展示语法:

mysql> use test
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table test1 (id int(2), varry varchar(3));
Query OK, 0 rows affected (0.08 sec)

mysql> create table test2 (id int(2), barry varchar(3));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test2 values(1,'aaa');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
Empty set (0.00 sec)

mysql> insert into test1 (select * from test2);
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+-------+
| id   | varry |
+------+-------+
|    1 | aaa   |
+------+-------+
1 row in set (0.00 sec)

mysql> alter table test2 add column third int(1);
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> update test2 set barry='ccc';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> insert into test1 (select * from test2);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql>

您的问题真的不清楚-当您没有指定匹配记录的标准时,为什么更新会起作用。你所说的64个结构是什么意思阿德里安:可能意味着64个字段。这将是一个有点乏味的名单,但这通常只是意味着OP是lazy@MarcB从未!OP始终提供回答他们问题所需的所有信息;-)@是的,是的-这是他一小时前发布的最后一个问题的后续问题。