2012-08-16 94 views
0

我正在循環使用一組值$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執行其他操作。有什麼想法嗎?謝謝。

UPDATE

感謝您的鏈接到不同的文檔。這肯定有幫助,但我還有一個問題。我當前的查詢是:

$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。

回答

5

MySQL不支持SELECT INTO語法。

另外,在循環內部運行查詢通常效率很低。相反,你可以做一個逗號分隔id S IN PHP和使用的列表:

$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); 
+0

不錯!我只需要在JOIN前添加INNER字樣。謝謝! – 2012-08-16 22:45:39

+0

太好了。很高興它的工作原理,但我不明白如何添加'INNER'會使查詢以不同的方式運行。 'INNER'是可選的,當它只是'JOIN'時暗示... – 2012-08-16 23:26:41

4

的原因是因爲MySQL不支持SELECT...INTO查詢。

改爲使用INSERT INTO...SELECT來實現相同的結果。

有關更多信息,請參閱參考手冊中的SELECT INTO Table Differences

+0

謝謝。該鏈接很有幫助。有沒有辦法通過product_id = $ id將這些字段複製到product_new中的現有行? – 2012-08-16 22:23:41

相關問題