将字段从一个表复制到另一个表

时间:2012-08-16 21:54:30

标签: php mysql sql

我循环遍历一组值$id,在某些情况下,我需要将两个数据字段从一个表(产品)复制到另一个表(product_new)。两个表都已存在,并且都包含相同的字段'product_description'和'image'。我试图这样做:

$copy_query = "SELECT product_description, image INTO product_new FROM product WHERE product_id=$id";
$result = mysql_query($copy_query) or die('Could not copy the database data: ' . mysql_error() .  '<br>Query: ' . $copy_query);

错误是'Undeclared variable:product_new'。我不明白这一点,因为我没有问题地使用表product_new执行其他操作。有什么想法吗?感谢。

更新

感谢您提供差异文档的链接。这肯定有帮助,但我还有一个问题。我目前的疑问是:

$copy_query = "INSERT INTO product_new (product_description, image)
    SELECT product.product_description, product.image
    FROM product
    WHERE product_id=$id";

但这是将数据写入product_id = 0的新行。我需要用product_id = $ id写入行。

2 个答案:

答案 0 :(得分:5)

MySQL不支持SELECT INTO语法。

此外,在循环内运行查询通常效率很低。相反,您可以在PHP中使用逗号分隔的id列表并使用:

$copy_query = '
    INSERT INTO product_new (product_description, image)
    SELECT product_description, image
    FROM   product
    WHERE  product_id IN (' . implode(',', $ids) . ')';

mysql_query($copy_query);

$ids是您的ID数组。

此解决方案只需执行一次(而不是在循环内执行多次)。


编辑:如果product_new中已存在行并且您想要更新它们,则可以使用:

$copy_query = '
    UPDATE product_new a
    JOIN   product b ON a.product_id = b.product_id
                    AND b.product_id IN (' . implode(',', $ids) . ')
    SET    a.product_description = b.product_description,
           a.image = b.image';

mysql_query($copy_query);

答案 1 :(得分:4)

原因是MySQL不支持SELECT...INTO查询。

而是使用INSERT INTO...SELECT来获得相同的结果。

有关详细信息,请参阅参考手册中的SELECT INTO Table Differences