将所有列从一个表复制到另一表,但需要指定几列php变量

时间:2019-05-19 22:04:11

标签: php mysql sql

我想将列从一个表复制到另一个表,当我要复制“ AllInOne”时这不是问题。

我会写:

INSERT INTO table2 SELECT * FROM table1 WHERE condition; 

如果我只需要复制部分列,我会写:

INSERT INTO table2 (column1, column2, column3, ...) 
   SELECT column1, column2, column3, ... FROM table1 WHERE condition;

但是

如果我需要复制所有列,但是我需要从$_POST[]$_GET[]获得的具有指定PHP变量的两三列怎么办? 如果我的表中可能只有十列,那么我将“手动”编写它,这是我的第二个示例。但是我的表中有30多个列... 因此,我试图找到一种组合,例如INSERT *column2column3

有什么方法可以做到吗?像这样:

NSERT INTO table2 ( *, Price, Customer) SELECT ( *, '451', 'John') 
   FROM table1 WHERE condition;

2 个答案:

答案 0 :(得分:0)

您很近。只是不要使用括号:

INSERT INTO table2 (column1, column2, . . ., price, customer)  -- list all columns here
    SELECT t1.*,  -- I advise you to list the columns here too
           451, 'John'
    FROM table1 t1
    WHERE condition;

答案 1 :(得分:0)

  

因此,我试图找到一些可以在其中插入*的组合,例如,还要指定column2,column3

如果我没有误会,那么这实际上实际上是一个SQL问题。如果您的问题是关于在PHP中绑定变量,那是另一回事了,但是从您的问题看来,您已经知道该怎么做。

SQL不支持类似于“ *除这些列之外的所有列”的语法。您只需要列出查询中的每一列。使用INSERT INTO ... SELECT *不能满足您的要求,并且仍然被认为是不好的做法(例如,如果您稍后从表中删除或添加一列,则将一个查询选择为另一个查询的查询将会中断)

  

如果表中可能只有十列,那么我将“手动”编写它,这是我的第二个示例。但是我的表中有30多个列...

那真的很糟糕吗?对于有效的代码,这是一笔很小的投资:)