Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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 使用相同的列计数和名称从一个表复制到另一个表_Php_Mysql_Pdo - Fatal编程技术网

Php 使用相同的列计数和名称从一个表复制到另一个表

Php 使用相同的列计数和名称从一个表复制到另一个表,php,mysql,pdo,Php,Mysql,Pdo,我有以下两张桌子 Table1 colA colB colC 1 a w 2 b w 3 c s 4 b g 5 n Table2 colA colB colC 1 w f 2 w r 3 s g

我有以下两张桌子

Table1
colA    colB    colC    
1       a       w    
2       b       w    
3       c       s        
4       b       g    
5       n         


Table2
colA    colB    colC    
1       w       f    
2       w       r    
3       s       g    
我想使用更新查询从表1复制到表2,问题是我必须设置所有的列名,其中每个表有100列,但我也有相同的列计数和名称

在php中运行查询更新的简单方法是什么

有没有什么东西可能是

这是我现在拥有的

public function update($id){
            try {
                UPDATE table1 b 
                INNER JOIN connect c 
                ON c.ID = b.ID 
                INNER JOIN table2 a 
                ON a.ID_a = c.ID_a 
                SET b.colA = a.colA,
                b.colB = a.colB,
                b.colC = a.colC
                .
                .
                .
                .
                . coontinue here all column name..
                .
                .
                WHERE a.ID_a = '".$id."' ";
             } catch(PDOException $e) {
                 $e->getMessage();
            }
            return false;
        }

有什么想法吗?

您不需要通过
更新
语法来实现。您可以使用插入..选择:

INSERT INTO `table2` SELECT * FROM `table1`
如果两个表中的结构完全相同,这将起作用。否则,您必须写入列名(并将列从第一个表映射到第二个表)

如果要替换相应的值,则应首先删除当前值:

DELETE FROM `table2` WHERE `colA` IN (SELECT `colA` FROM `table1`)

您不需要通过
UPDATE
语法来执行此操作。您可以使用插入..选择:

INSERT INTO `table2` SELECT * FROM `table1`
如果两个表中的结构完全相同,这将起作用。否则,您必须写入列名(并将列从第一个表映射到第二个表)

如果要替换相应的值,则应首先删除当前值:

DELETE FROM `table2` WHERE `colA` IN (SELECT `colA` FROM `table1`)

若要更新第一个表中的数据,请使用其他表中的值,可以使用next语句

UPDATE table_name AS t1 
SET t1.field_name = (SELECT field_name FROM other_table AS t2 WHERE t1.field=t2.field)

若要更新第一个表中的数据,请使用其他表中的值,可以使用next语句

UPDATE table_name AS t1 
SET t1.field_name = (SELECT field_name FROM other_table AS t2 WHERE t1.field=t2.field)

我很确定一个有100列的表没有被规范化。事实上,结构是这样的……这可能是“它是怎样的”,但这并不一定意味着它被规范化了!里面有什么东西?我很确定一个有100列的表没有被规范化。实际上,结构是这样的……可能是“它是怎样的”,但这并不一定意味着它被规范化了!你有什么样的东西?这将创建新行,而不是从一个表中更新另一个表中的数据。是的,但这不是OP想要的吗?(upd.编辑文章以实现替换问题)是的。只要您先删除。我如何使用INSERT语句,在重复键更新时…?不,如果您先
删除
项,则不会复制键值,这将创建新行,而不是更新另一个表中的数据。是的,但不是OP想要的吗?(upd.编辑文章以实现替换问题)是的。只要您先删除。在重复密钥更新时,我如何与INSERT语句一起使用…?否,如果您先
delete
项,您的密钥值将不会重复