Php [MySql]如何将一行从一个表复制到另一个表并填充其他列?

Php [MySql]如何将一行从一个表复制到另一个表并填充其他列?,php,mysql,sql,database,query-optimization,Php,Mysql,Sql,Database,Query Optimization,所以我想压缩这个问题,我不知道该怎么做 现在我用 $move_to_sold = "INSERT INTO sold_inv_item( `sku`, `designer`, `type`, `price`, `metal_type`, `stone_type`, `stone_weight`, `item_desc`, `item_img`

所以我想压缩这个问题,我不知道该怎么做

现在我用

$move_to_sold = 
    "INSERT INTO sold_inv_item(
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    )
    SELECT
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    FROM inv_item
    WHERE `sku` = '$sku'";

$add_date_and_name = 
    "UPDATE sold_inv_item 
    SET `purchase_date` = '$date', `customer_name` = '$name' 
    WHERE `sku` = '$sku'";
我试图做的是将一行从一个表复制到另一个表,然后从$\u POST data向两个额外的列中添加额外的数据

我试过类似的东西

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img` FROM inv_item WHERE inv_item.sku = 'pepsi-2-tone'), '2019-02-14','betty Girl');
我怀疑这会导致列不匹配错误,因为它试图将所有行放入一列,而不是将它们分散开来

最后,这是可行的,但如果可能的话,我宁愿做一些类似中间解决方案的事情

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `designer` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `price` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `metal_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_weight` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_desc` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_img` from inv_item where inv_item.sku = 'pepsi-2-tone'),'2019-02-14','betty Girl');
最后一个问题是,从代码和性能角度来看,将一行从一个表复制到另一个表并填充其他列的最有效方法是什么。
有一些类似的,但我找不到超过1-2列的封面被复制。

您可以使用
插入。。。选择
语法,如:

INSERT INTO sold_inv_item (
    `sku`,
    `designer`,
    `type`,
    `price`,
    `metal_type`,
    `stone_type`,
    `stone_weight`,
    `item_desc`,
    `item_img`, 
    `purchase_date`, 
    `customer_name`
)
SELECT 
    `sku`,
    `designer`,
     `type`,
     `price`,
     `metal_type`,
     `stone_type`,
     `stone_weight`,
     `item_desc`,
     `item_img`,
     :date,
     :name
FROM inv_item
WHERE `sku` = :sku

PS:当谈到在SQL查询中使用
POST
ed参数时,任何人都会强烈建议这样做,以保护您的代码不受SQL注入的影响,并使您的查询更加高效、可读和可维护。我修改了查询以使用命名参数。

这是可行的,我不知道您可以将表中不存在的变量直接添加到select。谢谢是的,我只是把逻辑弄清楚了。当它进入代码时,我将把它转换成一个准备好的查询。@Purgedmoon:没错。然后您可以准备一次语句,并根据需要多次重用它。