簡體   English   中英

除了MySQL中的1個條目外,如何從表中刪除所有內容?

[英]How do I delete everything from a table, except 1 entry in MySQL?

所以我有一個OpenCart的導入/導出模塊,但它在插入新數據之前擦除整個產品選項表...

我需要為我擁有的第三方產品選項模塊開發支持,但與此同時 - 我想我只是停止刪除產品選項表中的重要列。

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 ...但是返回了這個錯誤:

錯誤:鍵1的重復條目“0”錯誤號:1062更新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”;

但我得到:

錯誤:鍵1的重復條目“1”錯誤號:1062 INSERT INTO`oc_product ....

編輯:

好的,所以我從INSERT中刪除了'primary_key'字段...並且我沒有收到來自上傳的錯誤消息。 但是當我查看產品選項時,我將此消息作為我頁面的頂部:

注意:未定義的索引:第418行的/httpdocs/ocart/catalog/model/catalog/product.php中的名稱注意:未定義的索引:第418行的/httpdocs/ocart/catalog/model/catalog/product.php中的名稱...它重復了

請確保我理解:您希望清除表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)

我正在添加第二個答案,采用完全不同的方法來避免SQL問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM