除了MySQL中的1个条目外,如何从表中删除所有内容?

时间:2011-03-31 13:49:59

标签: php mysql mysql-error-1062

所以我有一个OpenCart的导入/导出模块,但在插入新数据之前它正在擦除整个产品选项表...

我需要开发对我拥有的第三方产品选项模块的支持,但与此同时 - 我想我只是停止删除产品选项表中的重要列。

product_option_value表格中,我有'product_option','product_id',''数量'等,并且有一个名为'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更新   {{1套   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。=“更新   oc_product_option_value   SET product_option_id = NULL,   product_id = NULL,quantity = NULL,   subtract = NULL,price = NULL,   prefix = NULL,sort_order = NULL,   重量= NULL; \ n“个;

但我明白了:

  

错误:键1的重复条目“1”   错误号:1062 INSERT INTO   `oc_product ....

修改

好的,所以我从INSERT中删除了'primary_key'字段...并且我没有从上传中收到任何错误消息。但是,当我查看产品选项时,我将此消息作为我的页面顶部:

  

注意:未定义的索引:名称在   /httpdocs/ocart/catalog/model/catalog/product.php   418行通知:未定义索引:   名字在   /httpdocs/ocart/catalog/model/catalog/product.php   在线418Notic ....它重复

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我正在添加第二个答案,采用完全不同的方法来避免SQL问题。

  1. 将表格导出为以逗号分隔的文本文件。您可以使用phpmyadmin或MySQL Workbench执行此操作。
  2. 在电子表格中打开CSV
  3. 清除要清除的列。
  4. 另存为新CSV
  5. 使用phpmyadmin,Workbench或LOAD DATA LOCAL INFILE语法将CSV导回数据库。