0

一連の値をループ処理してい$idますが、あるテーブル (製品) から別のテーブル (product_new) に 2 つのデータ フィールドをコピーする必要がある場合があります。両方のテーブルが既に存在し、両方に同一のフィールド「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で問題なく他の操作を実行するため、これはわかりません。何かご意見は?ありがとう。

アップデート

違いのドキュメントへのリンクをありがとう。それは間違いなく役に立ちましたが、もう1つ問題があります。私の現在のクエリは次のとおりです。

$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

SELECT INTOMySQLは構文をサポートしていません。

また、ループ内でクエリを実行することは一般的に非常に非効率的です。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);

$idsIDの配列はどこにありますか。

このソリューションは、(ループ内で何度も実行するのではなく)1回だけ実行する必要があります。


編集:すでに存在する行があり、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 に答える