我循环遍历一组值$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写入行。
答案 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。