网店日常维护过程中,难免要跟各种批量操作打交道,
虽然大多数操作可以通过批量上传 (easy populate) 和 快速更新 模块来完成,
但在应用便捷性和一些功能性的调整上, 总有一定的局限性;
网站的全部数据均存放在数据库中, 有什么变更 直接操作数据库无疑是最便捷的方式,
既然要动数据库, SQL语句是肯定离不开了,
日常跟网站打交道, 要接触熟悉各种代码, 这里又多了一种代码, 有点儿让人头大,
因此也就了本文, 下面为日常应用中可能涉及到的常用的批量操作SQL语句,
可多条同时执行 亦可按需 执行单条命令; 一条完整的SQL语句 以 ; 号结束.
下面的命令语句可以通过 后台 工具 安装SQL脚本 提交
也可以直接复制粘贴到 PHPMyadmin 中对应的数据库中的 SQL 项中 执行
一 批量删除全部商品等数据
# ——————————————————–
# 功能:清空Zen Cart中文版1.3.x的演示数据
# 提醒:请做好备份 !!!
# 使用:管理页面 -> 工具 -> 执行SQL脚本
#
# Zen Cart 中文博客
# ——————————————————–
代码:
# 清空商品分类、商品、属性
TRUNCATE TABLE categories;
TRUNCATE TABLE categories_description;
# 清空商品以及属性
TRUNCATE TABLE media_clips;
TRUNCATE TABLE media_manager;
TRUNCATE TABLE media_to_products;
TRUNCATE TABLE media_types;
TRUNCATE TABLE music_genre;
TRUNCATE TABLE product_music_extra;
TRUNCATE TABLE product_types_to_category;
TRUNCATE TABLE products;
TRUNCATE TABLE products_attributes;
TRUNCATE TABLE products_attributes_download;
TRUNCATE TABLE products_description;
TRUNCATE TABLE products_discount_quantity;
TRUNCATE TABLE products_notifications;
TRUNCATE TABLE products_options;
TRUNCATE TABLE products_options_types;
TRUNCATE TABLE products_options_values;
TRUNCATE TABLE products_options_values_to_products_options;
TRUNCATE TABLE products_to_categories;
TRUNCATE TABLE record_artists;
TRUNCATE TABLE record_artists_info;
TRUNCATE TABLE record_company;
TRUNCATE TABLE record_company_info;
# 清空推荐商品
TRUNCATE TABLE featured;
# 清空促销商品
TRUNCATE TABLE salemaker_sales;
# 清空特价商品
TRUNCATE TABLE specials;
# 清空团体价格
TRUNCATE TABLE group_pricing;
# 清空厂家及资料
TRUNCATE TABLE manufacturers;
TRUNCATE TABLE manufacturers_info;
# 清空客户评论
TRUNCATE TABLE reviews;
TRUNCATE TABLE reviews_description;
#清空前台注册用户 订单 历史订单等信息 慎用
TRUNCATE TABLE `address_book`;
TRUNCATE TABLE `admin_activity_log`;
TRUNCATE TABLE `counter`;
TRUNCATE TABLE `counter_history`;
TRUNCATE TABLE `customers`;
TRUNCATE TABLE `customers_basket`;
TRUNCATE TABLE `customers_basket_attributes`;
TRUNCATE TABLE `customers_info`;
TRUNCATE TABLE `orders`;
TRUNCATE TABLE `orders_products`;
TRUNCATE TABLE `orders_products_attributes`;
TRUNCATE TABLE `orders_products_download`;
TRUNCATE TABLE `orders_status_history`;
TRUNCATE TABLE `orders_total`;
TRUNCATE TABLE `paypal`;
TRUNCATE TABLE `paypal_payment_status_history`;
TRUNCATE TABLE `paypal_session`;
update `products_description` set `products_viewed` = '0' WHERE `products_viewed` > '0';
update `products` set `products_ordered` = '0' WHERE `products_ordered` > '0';
二 批量增加各常用项数据字段
#=====================================================================
# @ 增大 Zen Cart 数据库字段
#
# @ 使用方法: (下面三种导入方式 任选其一 不必重复操作)
# @ 1. 复制本文件代码, 粘贴入Zen Cart 后台 --> 工具 --> SQL安装 项中 提交 或 在其的 浏览文件中 找到本文件 直接提交导入
# @ 2. 直接在 PHPMyadmin中 的 当前数据库中的 SQL项 粘贴本文件代码, 执行即可
# @ 3. 在 PHPMyadmin 中的当前数据中 点击导入项 并导入本文件 执行即可
#
#=====================================================================
ALTER TABLE categories MODIFY categories_image varchar(255) ;
ALTER TABLE categories_description MODIFY categories_name varchar(255) ;
ALTER TABLE products MODIFY products_model varchar(255) ;
ALTER TABLE products MODIFY products_image varchar(255) ;
ALTER TABLE products_description MODIFY products_name varchar(255) ;
ALTER TABLE address_book MODIFY entry_firstname varchar(255) ;
ALTER TABLE address_book MODIFY entry_lastname varchar(255) ;
ALTER TABLE categories_description MODIFY categories_name varchar(255) ;
ALTER TABLE configuration_group MODIFY configuration_group_title varchar(255) ;
ALTER TABLE customers_wishlist MODIFY products_name varchar(255) ;
ALTER TABLE customers_wishlist MODIFY wishlist_name varchar(255) ;
ALTER TABLE files_uploaded MODIFY files_uploaded_name varchar(255) ;
ALTER TABLE orders MODIFY customers_name varchar(255) ;
ALTER TABLE orders MODIFY customers_email_address varchar(255) ;
ALTER TABLE orders MODIFY delivery_name varchar(255) ;
ALTER TABLE orders MODIFY billing_name varchar(255) ;
ALTER TABLE orders MODIFY cc_owner varchar(255) ;
ALTER TABLE orders_products MODIFY products_name varchar(255) ;
ALTER TABLE orders_products MODIFY products_model varchar(255) ;
ALTER TABLE address_book MODIFY entry_street_address varchar(255) ;
三批量变更商品部分属性
#==========================
# @ Zen Cart 中文博客
#==========================
#批量设置特价商品起始时间, 其中 0001-01-01 为 无起始时间
UPDATE specials SET specials_date_available ='0001-01-01';
#批量设置特价商品到期时间 其中 2020-12-31 为到期时间
UPDATE specials SET expires_date ='2020-12-31';
#批量开启特价商品
UPDATE specials SET status ='1';
#批量关闭特价商品
UPDATE specials SET status ='0';
#批量设置全站商品免运费
UPDATE products SET product_is_always_free_shipping = '1';
#批量更改商品添加时间 其中 2011-10-01 为添加时期
UPDATE products SET products_date_added = '2011-10-01';
#批量更改商品重量 其中 500 为重量值
UPDATE products SET products_weight = '500';
#批量设置库存数量 其中 99 为库存数量
UPDATE `products` SET `products_quantity` = '99';
#批量设置特价,其中 +11.55 指的是增加 11.55,如果是减少就是 -11.55
UPDATE specials SET specials_new_products_price=specials_new_products_price+11.55;
UPDATE products p,specials s SET p.products_price_sorter = s.specials_new_products_price WHERE p.products_id = s.products_id;
#批量设置原价,其中 +22.66 指的是增加 22.66,如果是减少就是 -22.66
UPDATE `products` SET `products_price`=`products_price`+22.66;
#批量替换商品描述指定字符
update products_description set products_description=replace(products_description,'这里输入要查找的字符','这里输入要替换的字符')
#批量配置图像参数
update configuration set configuration_value=replace(configuration_value,'原图像宽或高','想要修改的图像宽或高');
#按选项关健字段更新配置
UPDATE `configuration` SET `configuration_value` = '更新值' WHERE `configuration`.`configuration_key` = '配置项关健字段';
#按选项标题更新具体配置
UPDATE `configuration` SET `configuration_value` = '更新值' WHERE `configuration`.`configuration_title` = '配置项标题';
#恢复后台管理员密码为 admin 用于密码找回时使用
UPDATE `admin` SET `admin_pass` = '351683ea4e19efe34874b501fdbf9792:9b' WHERE `admin`.`admin_id` =1;
再补充一个 修复 因使用批量删除导致的后台添加商品属性下拉选择空白的SQL
详情可以参见: 解决 Zen cart 后台属性选项名称下拉空白问题
#==========================
# @ Zen Cart 中文博客
#==========================
INSERT INTO `products_options_types` VALUES (0, '下拉');
INSERT INTO `products_options_types` VALUES (1, '文本');
INSERT INTO `products_options_types` VALUES (2, '单选');
INSERT INTO `products_options_types` VALUES (3, '多选');
INSERT INTO `products_options_types` VALUES (4, '文件');
INSERT INTO `products_options_types` VALUES (5, '只读');
INSERT INTO `products_options_values` (products_options_values_id,language_id,products_options_values_name,products_options_values_sort_order) VALUES (0,1,'TEXT',0);
2012年8月29日更新:
修复批量删除商品后生成的垃圾属性信息 导致无法使用批量更新问题.
有时候商品原数据包含有属性时, 使用批量删除语句时,
导致数据表中属性信息删除不完全,
因此无法使用批量表重新导入商品数据,
这时候只要查看下 tempEP 目录下的 ep_debug_log.txt 文件,
一般会有如下内容
Product debris corresponding to the following product_id(s) cannot be deleted by EasyPopulate:
3:9d2458150f98263abbde3fa39f5a952c
It is recommended that you delete this corrupted data using phpMyAdmin.
将诸如 3:9d2458150f98263abbde3fa39f5a952c 这样格式的一句话复制下
然后将下面的修复SQL语句中的 将我替换为对应的垃圾信息
替换为 上面哪段复制下信息 然后通过SQL导入即可
#=====================================================================
# @ 修复批量删除商品后生成的垃圾属性信息 导致无法使用批量更新问题
#=====================================================================
DELETE FROM `customers_basket_attributes` WHERE (
CONVERT( `customers_basket_attributes_id` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `customers_id` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `products_id` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `products_options_id` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `products_options_value_id` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `products_options_value_text` USING utf8 ) LIKE '将我替换为对应的垃圾信息'
OR CONVERT( `products_options_sort_order` USING utf8 ) LIKE '将我替换为对应的垃圾信息');
DELETE FROM `orders_products_attributes` WHERE (
CONVERT(`orders_products_attributes_id` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`orders_id` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`orders_products_id` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_options` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_options_values` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`options_values_price` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`price_prefix` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`product_attribute_is_free` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_attributes_weight` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_attributes_weight_prefix` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_discounted` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_base_included` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_onetime` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_factor` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_factor_offset` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_factor_onetime` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_factor_onetime_offset` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_qty_prices` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_qty_prices_onetime` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_words` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_words_free` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_letters` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`attributes_price_letters_free` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_options_id` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_options_values_id` USING utf8) LIKE '将我替换为对应的垃圾信息'
OR CONVERT(`products_prid` USING utf8) LIKE '将我替换为对应的垃圾信息');
2012年12月26日更新:
解决本地邮件环境配置有问题时
Zen Cart1.5x后台无法提交涉及邮件通知操作项
Zen Cart15x 程序默认后台有修改提交时 会有邮件通知
当本地调试环境邮件相关环境配置有问题或不支持时
会导致本地安装的Zen Cart1.5x程序后台涉及邮件通知的操作无法进行
一个典型的实例就是首次安装后无法更改后台密码
使用临时密码登录时会出现下面的提示字样
Email Error: Could not instantiate mail function. Please check Admin->Configuration->Email Options->Email Transport.
当出现上述问题时,可以进入当前程序所使用的数据库下
将下面的SQL语句提交即可解决
#=====================================================================
# @ 解决本地邮件环境配置有问题时 Zen Cart1.5x后台无法提交涉及邮件通知操作项
#=====================================================================
#关闭邮件发送
UPDATE `configuration` SET `configuration_value` = 'false' WHERE `configuration`.`configuration_id` =267;
但当程序本地调试完毕 正式布暑后 建议启用邮件发送选项,
启用邮件发送项可于后台->商店配置->邮件参数下启用,
也可以直接使用下面的语句快速恢复.
#启用邮件发送
UPDATE `configuration` SET `configuration_value` = 'true' WHERE `configuration`.`configuration_id` =267;
2012年12月29日更新:
修复添加新语言包时, 原有以添加的商品和分类等信息无法编辑保存问题
在产品添加完成后, 再添加新的语言包时,
在编辑原有的产品或分类时会出现后台无法保存新添加的语言,
而新添加的商品或分类时则没有上述问题的情况.
出现此问题的原因是在数据库没有对应的数据条目,
而编辑原有产品时, 程序只执行更新操作, 所以无法保存.
针对此问题的解决的办法是在多语言添加后再重新进行产品和分类信息的添加,
或者运行下面的SQL语句把缺失的多语言内容补修复补全即可.
需要注意的是, 当添加了多个新的语言包时,
下面的修复sql 需要分别调整执行多次,
具体调整参见后面详细说明;
#=====================================================================
# @ 修复添加新语言包时, 原有以添加的商品和分类等信息无法编辑保存问题
#=====================================================================
#设置默认语言的ID
SET @default_lang=1;
#设置新语言的ID
SET @target_lang=2;
INSERT INTO `products_description` ( products_id, language_id, products_name, products_description, products_url,products_viewed )
SELECT products_id, @target_lang AS language_id, products_name, products_description, products_url, products_viewed
FROM `products_description`
WHERE language_id =@default_lang
AND products_id NOT IN (
SELECT products_id FROM `products_description`
WHERE language_id =@target_lang
);
#补齐缺失的语言(分类)
INSERT INTO `categories_description` (categories_id,language_id,categories_name,categories_description )
SELECT categories_id,@target_lang AS language_id,categories_name,categories_description
FROM `categories_description`
WHERE language_id =@default_lang
AND categories_id NOT IN (
SELECT categories_id FROM `categories_description`
WHERE language_id =@target_lang
);
#补齐缺失的语言(产品META)
INSERT INTO `meta_tags_products_description` ( products_id, language_id, metatags_title, metatags_keywords, metatags_description )
SELECT products_id, @target_lang AS language_id, metatags_title, metatags_keywords, metatags_description
FROM `meta_tags_products_description`
WHERE language_id=@default_lang
AND products_id NOT IN (
SELECT products_id FROM `meta_tags_products_description`
WHERE language_id =@target_lang
);
#补齐缺失的语言(分类META)
INSERT INTO `meta_tags_categories_description` ( categories_id, language_id, metatags_title, metatags_keywords, metatags_description )
SELECT categories_id, @target_lang AS language_id, metatags_title, metatags_keywords,metatags_description
FROM `meta_tags_categories_description`
WHERE language_id=@default_lang
AND categories_id NOT IN (
SELECT categories_id FROM `meta_tags_categories_description`
WHERE language_id =@target_lang
);
上面的sql语句注意下面这两句,
#设置默认语言的ID
SET @default_lang=1;
#设置新语言的ID
SET @target_lang=2;
这两句sql语句中的语言ID需要根距自己的网站实际情况作针对性的调整修改,
当前网站的实际语言ID获取可通过下面的方法获得,
后台 -> 界面设定 -> 语言代码 -> 点击对应的语言项目,
然后查看浏览器地址栏中的地址 有诸如此类的地址格式
http://你的域名/你的管理目录名/languages.php?page=1&lID=2
红色标识字样即为对应的语言ID
小提示: 涉及到批量和数据库操作时 先备份当前数据库是一个很好的习惯