从oscommerce中删除非活动产品

时间:2013-11-21 17:09:02

标签: php mysql sql

我正在使用最新的oscommerce。

我收到了大量不活跃的产品。我想删除它们。虽然管理员一次只是很慢。

我想如果我创建一个新的临时类别并将所有非活动产品移动到此临时类别,那么使用oscommerce的后端我可以轻松删除它们。这样做也会删除相关的图像。

产品通过产品ID关联,类别关联由产品到类别表完成。非活动产品通过products_status = 0;

设置
CREATE TABLE IF NOT EXISTS `products` (
  `products_id` int(11) NOT NULL AUTO_INCREMENT,
  `products_quantity` int(4) NOT NULL,
  `products_model` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `products_ean` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `google_product_category` varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL,
  `products_image` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `products_price` decimal(15,4) NOT NULL,
  `products_date_added` datetime NOT NULL,
  `products_last_modified` datetime DEFAULT NULL,
  `products_date_available` datetime DEFAULT NULL,
  `products_weight` decimal(5,2) NOT NULL,
  `products_status` tinyint(1) NOT NULL,
  `products_tax_class_id` int(11) NOT NULL,
  `manufacturers_id` int(11) DEFAULT NULL,
  `products_ordered` int(11) NOT NULL DEFAULT '0',
  `products_last_import` datetime DEFAULT NULL,
  `products_submit_google` smallint(6) NOT NULL DEFAULT '1',
  `icecat_prodid` int(10) unsigned NOT NULL,
  `vendors_id` int(11) DEFAULT '1',
  `products_availability` smallint(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`products_id`),
  KEY `idx_products_model` (`products_model`),
  KEY `idx_products_date_added` (`products_date_added`),
  KEY `idx_icecat_prodid` (`icecat_prodid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=292067 ;


CREATE TABLE IF NOT EXISTS `products_to_categories` (
  `products_id` int(11) NOT NULL,
  `categories_id` int(11) NOT NULL,
  PRIMARY KEY (`products_id`,`categories_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我尝试过使用以下查询,但收到错误#1062 - 重复输入' 276917-29240'关键' PRIMARY'

Update products p ,products_to_categories pc 
set pc.categories_id = 29598 
where p.products_id = pc.products_id  
and p.products_status = 0

1 个答案:

答案 0 :(得分:1)

您很可能拥有一个或多个类别的产品。

示例:products_id = 123的产品ABC在products_to_categories表中可以存在两次,如果它在两个类别中(比如'categories_id`222和333.那么你的表中有两个条目, 123-222和123-333。

当您运行更新时,第一次遇到产品/类别123-222时,它会将其类别更改为123-29598。当遇到产品/类别123-333时,由于您的主键约束,它也会尝试将行更新为123-29598,并且会导致您看到的问题。

也许在您的脚本中,您可以检查产品(123)是否已存在于类别中,如果存在,则删除第二个条目(123-333),而不是将其类别更改为(123-29598)。请参阅here for information on deleting entries with the same id from your table