だから私は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_value
SET 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...繰り返します