0

だから私はOpenCartのインポート/エクスポートモジュールを持っていますが、新しいデータを挿入する前に製品オプションテーブル全体を消去しています...

私が持っているサード パーティ製の製品オプション モジュールのサポートを開発する必要がありますが、それまでの間、製品オプション テーブルの重要な列を削除しないようにしようと考えています。

テーブルにはproduct_option_value、「product_option」、「product_id」、「quantity」などがありますが、消去したくない「info」という名前の列が 1 つあります。方法は以下です。

function storeOptionsIntoDatabase( &$database, &$options ) 
{
    // find the default language id
    $languageId = $this->getDefaultLanguageId($database);

    // start transaction, remove options
    $sql = "START TRANSACTION;\n";
    $sql .= "DELETE FROM `".DB_PREFIX."product_option`;\n";
    $sql .= "DELETE FROM `".DB_PREFIX."product_option_description` WHERE language_id=$languageId;\n";
    $sql .= "DELETE FROM `".DB_PREFIX."product_option_value`;\n";
    $sql .= "DELETE FROM `".DB_PREFIX."product_option_value_description` WHERE language_id=$languageId;\n";
    $this->import( $database, $sql );

    ...more code...
}

私はMySQLに精通していませんが、次のような効果が欲しいです:

$sql .= "DELETE FROM `".DB_PREFIX."product_option_value` WHERE column != 'info';\n";

ありがとう!

編集:

私はマイケルの提案を使用UPDATEして明示的にそれらをすべてNULLに設定しようとしました...しかし、それはこのエラーを返しました:

エラー: キー 1 の重複エントリ '0' エラー番号: 1062 UPDATE oc_product_option_valueSET product_option_value_id=NULL、product_option_id=NULL、product_id=NULL、quantity=NULL、subtract=NULL、price=NULL、prefix=NULL、sort_order=NULL、weight= NULL、sku=NULL、画像=NULL

主キーを取り出してみました:

$sql .= "UPDATE ".DB_PREFIX."product_option_value SET product_option_id=NULL, product_id=NULL, 数量=NULL, 減算=NULL, 価格=NULL, プレフィックス=NULL, sort_order=NULL, 重量=NULL;\n";

しかし、私は得る:

エラー: キー 1 のエントリ '1' が重複しています エラー番号: 1062 INSERT INTO `oc_product....

編集:

わかりましたので、INSERT から「primary_key」フィールドを削除しました...アップロードからエラー メッセージは表示されませんでした。しかし、製品オプションの製品を表示すると、ページの上部に次のメッセージが表示されます。

Notice: Undefined index: name in /httpdocs/ocart/catalog/model/catalog/product.php 行 418Notice: Undefined index: name in /httpdocs/ocart/catalog/model/catalog/product.php 行 418Notic...繰り返します

4

2 に答える 2

2

理解していることを確認してください: 列product_option_valueを除くテーブル内のすべての列から値をクリアしたいinfoですか? それがあなたが望むものなら、次のことがうまくいくかもしれません。何をしようとしているのかが明確になるまで実行しないでください。

DELETE FROM構文は、列名ではなく、テーブル名から削除することを意味します。代わりに行う必要があるのはUPDATE、保持する予定の列を除くすべての列を行に設定するかNULL、空にするか、デフォルト値にすることです。

WHERE一部の行を変更せずにそのままにしておく必要がある場合は、条件を追加することを忘れないでください。がないとWHERE、このクエリはテーブル全体で指定されたすべての列を NULL アウトします。

UPDATE product_option_value
SET 
  product_option = NULL,
  product_id = NULL,
  quantity = NULL,
  etc...
WHERE (some where condition if you need one)
于 2011-03-31T13:57:56.050 に答える
0

SQLの問題を回避するまったく異なるアプローチを採用して、2番目の回答を追加しています。

  1. テーブルをカンマ区切りのテキスト ファイルとしてエクスポートします。これは、phpmyadmin または MySQL Workbench で実行できます。
  2. スプレッドシートで CSV を開く
  3. クリアしたい列をクリアします。
  4. 新しい CSV として保存
  5. LOAD DATA LOCAL INFILEphpmyadmin、Workbench、または構文を使用して、CSV をデータベースにインポートします。
于 2011-03-31T14:55:13.510 に答える