0

あるテーブルの1つの列のすべての行に、別のテーブルの列のデータと、それらすべてを結合するための製品コードを入力しようとしています。

だからaatest.stock更新するにはproducts_attributes.attributes_part_number

これは私が持っているものです:

$dbh = new PDO('mysql:host=localhost;dbname='. 
           DB_DATABASE, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);

$dbh->exec('UPDATE products_attributes 
        SET aatest.code = products_attributes.attributes_part_number 
        WHERE products_attributes.attributes_stock = aatest.stock');

    ?>

これが機能しない理由についてのアドバイスをいただければ幸いです。

MySQL5.5を実行しています

4

4 に答える 4

3

ステートメントが「機能していない」理由は、MySQL 構文が無効であるためです。

http://dev.mysql.com/doc/refman/5.5/en/update.html

codeこのようなものは、テーブルの列をテーブルの列aatestから取得した値に設定して、必要な結果を得るはずです。products_attributes

UPDATE aatest
  JOIN products_attributes 
    ON aatest.stock = products_attributes.attributes_stock
   SET aatest.code = products_attributes.attributes_part_number

JOIN キーワードを避けたい場合は、代わりにコンマ演算子を使用して、結合述語を ON 句から WHERE 句に移動できます。

UPDATE aatest
     , products_attributes 
   SET aatest.code = products_attributes.attributes_part_number
 WHERE aatest.stock = products_attributes.attributes_stock

(しかし、結合構文のカンマ スタイルは古いスタイルです。私たちはこのJOIN ... ONスタイルを好みます。)

そのようなステートメントに到達する方法は、次のように SELECT ステートメントから始めることです。

SELECT *
  FROM aatest
  JOIN products_attributes 
    ON aatest.stock = products_attributes.attributes_stock

(もちろん、列数が多い場合は、対象の列を指定します。)

SELECT を使用すると、更新される行、列の現在の値code(aatest から)、および割り当てられる新しい値を確認できます。

これが機能するようになったら、' SELECT * FROM' を ' UPDATE' キーワードに置き換え、SET更新する列を指定する句を追加します。

  SET aatest.code = expr 

(更新構文の風変わりな点は、SET句が句の前に現れる必要があることWHEREです。)

于 2013-01-21T21:38:26.790 に答える
1

2 つのテーブル間の結合を UPDATE ステートメントに追加する必要があります。

このようなもの:

UPDATE aatest
       JOIN products_attributes on products_attributes.attributes_stock = aatest.stock
        SET aatest.code = products_attributes.attributes_part_number 
于 2013-01-21T21:35:27.820 に答える
0

ご意見をお寄せいただきありがとうございました。本当に役に立ちました。最終的に正しいコードは次のとおりです。

$dbh->exec('UPDATE products_attributes, aatest 
            SET products_attributes.attributes_stock = aatest.stock 
            WHERE products_attributes.attributes_part_number = aatest.code');

ただし、数時間髪を引っ張った後に見つかった問題は、MYSQL で作成したテーブルが、データを交換しようとしていたテーブルとは異なるエンコーディング (デフォルトで設定) を持っていたことです。どっ!

これが、私のような彼自身の最悪の敵である別の新進コーダーに役立つことを願っています:D

改めまして、ご意見をお寄せいただきありがとうございます。皆さんがどれだけ早く助けようとしたかに圧倒されました.. 私にとっては初めてでした。

于 2013-01-22T22:07:22.690 に答える
0

試す:

UPDATE products_attributes, aatest 
    SET aatest.code = products_attributes.attributes_part_number 
        WHERE products_attributes.attributes_stock = aatest.stock
于 2013-01-21T21:45:09.023 に答える