0

我正在遍历一组值$id,在某些情况下,我需要将 2 个数据字段从一个表(产品)复制到另一个表(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);

错误是“未声明的变量: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 的行。

4

2 回答 2

5

MySQL 不支持该SELECT INTO语法。

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

$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);
于 2012-08-16T21:58:07.160 回答
4

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

而是使用INSERT INTO...SELECT来达到相同的结果。

有关详细信息,请参阅参考手册中的SELECT INTO 表差异

于 2012-08-16T22:00:16.380 回答