2011-03-31 53 views
0

所以,我對於Opencart的導入/導出模塊,但它抹在整個產品選項表中插入新的數據之前...如何從表中刪除所有內容,除了MySQL中的1項外?

我需要開發第三方產品選擇模塊我有支持,但在同時 - 我想我會阻止它刪除我的產品選項表中的重要列。

product_option_value表中,我有'product_option','product_id','quantity'等,並且有一列名爲'info',我不想擦除。方法如下:

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 ......但返回此錯誤:

Error: Duplicate entry '0' for key 1 Error No: 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, image=NULL

我試圖取出主鍵:

$sql .= "UPDATE ".DB_PREFIX."product_option_value SET product_option_id=NULL, product_id=NULL, quantity=NULL, subtract=NULL, price=NULL, prefix=NULL, sort_order=NULL, weight=NULL;\n";

,但我得到:

Error: Duplicate entry '1' for key 1 Error No: 1062 INSERT INTO `oc_product....

編輯:

好了,所以我刪除了從插入了「primary_key」字段...和我從上傳任何錯誤消息。但是,當我看到一個產品,產品的選擇,我得到這個消息,我的網頁的頂部:

Notice: Undefined index: name in /httpdocs/ocart/catalog/model/catalog/product.php on line 418Notice: Undefined index: name in /httpdocs/ocart/catalog/model/catalog/product.php on line 418Notic.... it repeats

+0

查詢有什麼問題。似乎對我很好。 – Nishant 2011-03-31 13:53:32

+0

最後的陳述是正確的。 – Emmerman 2011-03-31 13:56:34

+0

好吧,就這樣做....你可能需要'<>'而不是'!='。在手冊中查找MySQL操作符語法。 – 2011-03-31 14:03:21

回答

2

確保我的理解:你想從所有列在表中product_option_value清除值除列info?如果這就是你想要的,那麼以下可能會起作用。在我們清楚你想要做什麼之前,請不要運行它!

DELETE FROM語法意味着從表名刪除,而不是列名。您需要執行的操作是將UPDATE您的行設置爲除您打算保留爲NULL或空白或默認值之外的所有列。

如果您需要保留一些行而不修改它們,請不要忘記添加WHERE條件!如果沒有WHERE,此查詢將會清空整個表中指定的所有列。

UPDATE product_option_value 
SET 
    product_option = NULL, 
    product_id = NULL, 
    quantity = NULL, 
    etc... 
WHERE (some where condition if you need one) 
+0

@Michael - 用我得到的錯誤消息更新了我的問題... – jlmakes 2011-03-31 14:17:26

+0

可能因爲您設置了'product_option_id = NULL,product_id = NULL'。您無法覆蓋表格的主鍵字段。那些將不得不保持原樣,以及相關的「信息」列。如果您不知道關鍵字段,請使用'DESCRIBE product_option_value;'來查找它們。然後重新運行您的'UPDATE'語句而不使用鍵列的NULL。 – 2011-03-31 14:31:35

+0

@Michael - 我試圖從查詢中刪除主鍵字段(product_option_value_id),並且我收到了類似的錯誤消息。見上面... – jlmakes 2011-03-31 14:40:52

0

我添加了第二個答案,採取了一種完全不同的方法來避免SQL問題。

  1. 將表格導出爲逗號分隔文本文件。您可以使用phpmyadmin或MySQL Workbench來完成此操作。
  2. 在電子表格中打開您的CSV
  3. 清除您要清除的列。
  4. 另存爲新的CSV
  5. 使用phpmyadmin,Workbench或LOAD DATA LOCAL INFILE語法將CSV導回到數據庫中。
+0

這是Opencart的第三方導入/導出擴展。我試圖修改代碼,以便它不擦除由另一個第三方擴展創建的另一列。我需要修改每個導入/導出代碼,而不僅僅是一次性交易:/ – jlmakes 2011-03-31 14:58:34

相關問題