★完整版配置文件: 运行这个可爱的雷人SQL语句,请确保手工指定分隔符为“$$”——在Phpmyadmin中,手工在SQL窗口中指定,在其他程序或者Mysql命令行时,用delimiter $$
/*
功能:实现把顾客登录信息从Shopex导入到Magento,数据迁移。完整版将判断地址、姓名、邮编等信息的有效性与否,如果无效,则从Shopex 的送货地址中提取,并尝试把导入多地址到Magento——因为Shopex 4.3和Magento 1.3都支持多地址
版本: V0.0,完整版
环境: Shopex 4.3 && Magento 1.3.2.3
作者: 弟兄小方·Magento官方网站中文翻译协调员·北京守望电影小组 完成
开发日期: 2009年8月28日
联系方式: lanshunfang##gmail.com , ##换为@
版权: 转载请包含此注释,并注明出处;
金句:
【林前13:5】 不作害羞的事。不求自己的益处。不轻易发怒。不计算人的恶。
【林前13:6】 不喜欢不义。只喜欢真理。
【林前13:7】 凡事包容。凡事相信。凡事盼望。凡事忍耐。
【林前13:8】 爱是永不止息。先知讲道之能,终必归于无有。说方言之能,终必停止, 知识也终必归于无有 。
*/
/* 请确保手工指定分隔符为“ $$——在Phpmyadmin中,手工在SQL窗口中相应位置填写,在其他程序或者Mysql命令行时,用delimiter $$ */
DROP FUNCTION IF EXISTS `if_null`$$
CREATE FUNCTION `if_null` (m VARCHAR(200), n VARCHAR(200)) RETURNS VARCHAR(200)
BEGIN
RETURN IFNULL(m,n);
END $$
/*这个存储函数用来返回非空值,下面将多次调用。在Shopex中,很多人是没有填联系方式的,所以处理方式是:如果他们的联系方式中的相关字段是空值,则我们直接从他们的邮寄地址方式中获取相关的值*/
SELECT *,COUNT(DISTINCT `member_id`)
FROM `bdb_member_addrs` AS `d`WHERE `d`.`name` <> ""
AND `d`.`addr` <> ""
GROUP BY `d`.`member_id`
ORDER BY `d`.`tel` DESC, `d`.`mobile` DESC
/*产生顾客地址新表,过滤无地址、无姓名的记录,合并相同的member_id,针对特定的用户,我只要一个有效地址就行了*/
CREATE TABLE `ShopexToMagento_Customer` (
/* 产生电子邮件 */
CASE
WHEN (`a`.`email`REGEXP '^kefu@baojiayin.com') = "1"
THEN CONCAT(`a`.`uname`,"@baojiayin.com")/*如果Email是我们的客户Email,即kefu@baojiayin.com ,则视之为顾客没有邮箱,则使用用户名@baojiayin.com的方式作为登录名*/
WHEN `a`.`email` <> ""
THEN `a`.`email`/*顾客有邮箱,且不是kefu@baojiayin.com 的直接使用邮箱*/
ELSE CONCAT(`a`.`uname`,"@baojiayin.com")/*顾客没有邮箱的,则使用用户名@baojiayin.com的方式作为登录名 */
END
AS `email`, /*电子邮件:如果顾客邮件不为空,则直接使用邮件,如果顾客邮件为空,则直接在其用户名后面加上@baojiayin.com作为登录名*/
"General" AS `group_id`, /*顾客所在组,直接指定为General,如果你们有批发组或者代理组,自行根据Shopex相应字段来产生*/
"" AS `prefix`, /*前缀,美国人用前缀来表示称呼,如果Mr或者President*/
/* 产生顾客称谓(先生、女士) */
CASE
WHEN `a`.`sex` = "0" THEN "女士"
WHEN `a`.`sex` = "1" THEN "先生"
ELSE ""
END
AS `suffix `, /*后缀,美国人用后缀不是很多,如William II 或者Bush senior(老布什,有的美国家庭三代同堂,且同名!这个很雷。他们用后缀来区别是父亲还是孩子还是爷爷),咱们中国人就用后缀来表示先生、女士了*/
/* 产生顾客姓名 */
if_null ( `a`.`name`, `t1`.`name` )
"." AS `lastname`, /*弄个小点,不过要留着,免得Magento程序生你的气*/
`a`.`password` AS `password_hash`, /*经测试发现,Shopex的密码加密串采用标准MD5,Magento的密码加密串采用标准MD5+":"+"两个随机字母",所以二者可以兼容*/
"" AS `billing_prefix`, /*空的,留着*/
/* 产生顾客账单姓名 */
if_null ( `a`.`name`, `t1`.`name` )
"." AS `billing_lastname`, /*这个上面注释过了*/
/* 产生顾客账单地址 */
if_null ( `a`.` addr `, `t1`.` addr ` )
`a`.`city` AS `billing_city`, /*账单寄往的城市,这个需要小心!因为要成功的把Shopex中的中国城市导入Magento,您需要首先导入中国的城市名称到数据库,要不没有办法匹配,怎么导?可以给我发电子邮件,小方PM给你*/
`a`.`province` AS `billing_region`, /*省份,Shopex挺混淆的,其值和城市一样,推测可能是数据库设计者留给将来版本的*/
"CN" AS `billing_country`, /*账单寄往的国家,这些都设为中国了,诸位按照自己的情况设定*/
/* 产生顾客账单邮编 */
if_null ( `a`.` zip `, `t1`.` zip ` )
/* 产生顾客账单电话 */
if_null ( `a`.` tel `, `t1`.` tel ` )
/* 产生顾客账单手机号 */
if_null ( `a`.` mobile `, `t1`.` mobile ` )
/* 产生顾客邮寄姓名 */
if_null ( `a`.` name `, `t1`.` name ` )
"." AS `shipping_lastname`, /*同上*/
/* 产生顾客邮寄地址 */
if_null ( `a`.` addr `, `t1`.` addr ` )
`a`.`city` AS `shipping_city`, /*同上*/
`a`.`province` AS `shipping_region`, /*同上*/
"CN" AS `shipping_country`, /*同上*/
/* 产生顾客邮寄邮编 */
if_null ( `a`.` zip `, `t1`.` zip ` )
/* 产生顾客邮寄电话 */
if_null ( `a`.` tel `, `t1`.` tel ` )
"" AS `shipping_company`, /* 同上 */
/* 产生顾客邮寄手机号 */
if_null ( `a`.` mobile `, `t1`.` mobile ` )
"cs_chinese_storeview" AS `created_in`/* 会员是从哪里创建的,这个需要根据您自己的情况而定了,前面的代号是Store View的Code,需要你自己到Magento后台查 */
FROM `bdb_members` AS `a` LEFT JOIN `tmp_name_addr_tel_mobile` AS `t1` ON `a`.`member_id` = `t1`.`member_id`
) $$
SELECT * FROM `ShopexToMagento_Customer`