又是s的草稿,留底用,dzlite2smf

TC14年前 (2012-11-20)网站与博客821
先在关卡空间的数据库里建立几个smf的空表,用于完事后从关卡空间导出再导入gmly.info:
(一定注意两个数据库的编码)
smf_messages_dz (结构同 smf_messages,下同,略)
smf_topics_dz
smf_members_dz
转换顺序:
1. 建立上述空表
2. 转换帖子
3. 转换主题
4. 更新板块
5. 转换用户
6. 补充用户数据(貌似没必要了)
7. 更新帖子,主题的id
8. 更新用户的id;
=================== 2 =============================
转换帖子  cdb_posts => smf_messages_dz
INSERT INTO smf_messages_dz
SELECT
    pid AS id_msg,tid AS id_topic, fid AS id_board, dateline AS poster_time, 
    authorid AS id_member, pid AS id_msg_modified, subject AS subject, 
    author AS poster_name, authorid AS poster_email, useip AS poster_ip, 
    1 AS smileys_enabled, 0 AS modified_time, NULL AS modified_name, 
    message AS body, "xx" AS icon, 0 AS hiddenOption, 0,1
FROM cdb_posts;
****  dzlite回复的帖子都没标题,改成 Re:帖子标题的形式
UPDATE `smf_messages_dz` SET `subject`="Re:" + ?? WHERE subject = ""(有错,还不会)
【Post.php 1209行 function Post2() ; 1266行 】
==================== 3 ============================
转换主题  cdb_threads => smf_topics_dz
INSERT INTO smf_topics_dz
SELECT   
    t.tid AS id_topic, 0 AS is_sticky, t.fid AS id_board, 
    MIN(p.pid) AS id_first_msg, MAX(p.pid) AS id_last_msg,
    t.authorid AS id_member_started, NULL id_member_updated,
    0 AS id_poll, 0 AS id_previous_board,
    0 AS id_previous_topic, t.replies AS num_replies, 
    t.views AS num_views,  0 AS locked, 
    0 AS unapproved_posts, 1 AS approved
FROM (cdb_threads AS t, cdb_posts AS p)
WHERE p.tid = t.tid
GROUP BY t.tid;
*******
1. dz里面的moderated是什么意思,
2. 没有更新最后回复人的id,不影响吧。
==================== 4 ==============================
更新板块
dz的板块(cdb_forums)不用导入smf,需要做的是,将所涉及板块fid的表(主题及帖子)里的fid都更新成smf里面对应的id_board。
**注意,如果是先转换主题及帖子,则应更新的是转换后的表。
fid  =>  id_board
3(自制关卡)    9
4(官方游戏)    60 (TC:"全是9代")
6(水)        21
7(站务)    1
UPDATE smf_topics_dz
SET id_board = 9
WHERE id_board = 3;
UPDATE smf_topics_dz
SET id_board = 60
WHERE id_board = 4;
UPDATE smf_topics_dz
SET id_board = 21
WHERE id_board = 6;
UPDATE smf_topics_dz
SET id_board = 1
WHERE id_board = 7;
UPDATE smf_messages_dz
SET id_board = 9
WHERE id_board = 3;
UPDATE smf_messages_dz
SET id_board = 60
WHERE id_board = 4;
UPDATE smf_messages_dz
SET id_board = 21
WHERE id_board = 6;
UPDATE smf_messages_dz
SET id_board = 1
WHERE id_board = 7;
==================== 5 ==============================
转换用户 cdb_members => smf_members_dz
INSERT INTO smf_members_dz
SELECT
    uid AS id_member, username AS member_name, 
    regdate AS date_registered, posts AS posts,
    0 AS id_group, NULL AS lngfile,  
    lastvisit AS last_login, username AS real_name,
    0 AS instant_messages, 0 AS unread_messages,
    NULL AS buddy_list, NULL AS pm_ignore_list, NULL AS message_labels,
    password AS passwd, email AS email_address,
    "gmly.info" AS personal_text, gender AS gender,
    "0001-01-01" AS birthdate, NULL AS website_title,
    NULL AS website_url, NULL AS location,
    NULL AS QQ, NULL AS icq, NULL AS aim, NULL AS yim, NULL AS msn,
    1 AS hide_email, 1 AS show_online, NULL AS time_format,
    NULL AS signature, 0 AS time_offset, NULL AS avatar,
    1 AS pm_email_notify, 0 AS karma_bad, 0 AS karma_good,
    NULL AS usertitle, 1 AS notify_announcements,
    1 AS notify_regularity, 0 AS notify_send_body, 2 AS notify_types,
    regip AS member_ip, NULL AS secret_question,
    NULL AS secret_answer, 0 AS id_theme, 1 AS is_activated,
    NULL AS validation_code, 0 AS id_msg_last_visit,
    NULL AS additional_groups, "Lots_O_Smileys" AS smiley_set,
    4 AS id_post_group, 0 AS total_time_logged_in,
    0 AS password_salt, NULL AS longitude, NULL AS latitude,
    0 AS g2_uid, lastip AS member_ip2, 0 AS is_gallery_user,
    NULL AS mod_prefs, 0 AS warning, NULL AS ignore_boards,
    0 AS new_pm, 0 AS pm_prefs,
    NULL AS openid_uri, NULL AS passwd_flood
FROM cdb_members;
******
1. smf的id_post_group是什么
2. smf的instant_messages是什么,personal_message么,数量暂时用0;短消息相关均不在上面的语句里;
3. member_ip用dz的注册ip,member_ip2用dz的最后登录ip;
4. 总在线时长为0
5. 签名档不在上面语句里,先用空值。
6. password_salt是什么。
======================= 6 ==========================
追加用户数据 (cdb_memberfields里的内容)
4人写了个人网站,12热写了QQ,4人写了msn,17人有签名;头像不知道怎么转换。
不补充数据了吧。
======================= 7 ==========================
更新帖子及主题的id (增加到smf论坛的后面)
gmly现在主题数的最大值 SELECT MAX(id_topic) FROM smf_topics (gmly.info的,下同)
gmly现在帖子数的最大值 SELECT MAX(id_msg) FROM smf_messages
UPDATE smf_topics_dz
SET id_topic = id_topic + [gmly现在主题数的最大值],
    id_first_msg = id_first_msg + [gmly现在帖子数的最大值],
    id_last_msg = id_last_msg + [gmly现在帖子数的最大值];
UPDATE smf_messages_dz
SET id_topic = id_topic + [gmly现在主题数的最大值],
    id_msg = id_msg + [gmly现在帖子数的最大值],
    id_msg_modified = id_msg_modified + [gmly现在帖子数的最大值];
======================= 8 ==========================
查找相同用户名的用户(注意相同邮箱);更新所有用户的id;
1. 新建一个表,包含有重名的用户在中文站里及关卡空间里的两个id,及用户名。**注意中文站里member_name和real_name都要检查 Orz**
2. 将关卡空间转换后的数据表(主题,帖子等)里涉及该用户的uid更新为中文站里对应的id_member;
3. 删除关卡空间转换后的用户数据表(smf_members_dz)该名用户的资料;
4. 用户id增大,以便导入到中文站。
(以上顺序第四步把主题帖子里的用户id增大后,重复的那些人会找不到smf里的id了,还要改回来,麻烦)
////////////////////////  新  顺  序 ///////////////////////
1. 用户id增大(member_dz, messages_dz,topics_dz)
2. 建表,插值,删这个表同名马甲的资料。
3. 处理重复用户名的id(member_dz, messages_dz,topics_dz),
4. 删掉重复用户名的资料member_dz
>>>>8.1
UPDATE smf_members_dz, smf_messages_dz, smf_topics_dz
SET smf_members_dz.id_member = smf_members_dz.id_member + [gmly现在用户id的最大值],
    smf_messages_dz.id_member = smf_messages_dz.id_member + [gmly现在用户id的最大值],
    smf_topics_dz.id_member_started = smf_topics_dz.id_member_started + [gmly现在用户id的最大值];
>>>>8.2   在中文站的数据库里新建表,并且需要把smf_members_dz复制到中文站数据库里
CREATE TABLE `数据库名`.`yonghuming` (
`gmly_id_member` mediumint( 8 ) unsigned NOT NULL ,
`cdb_uid` mediumint( 8 ) unsigned NOT NULL ,
`member_name` char( 15 ) CHARACTER SET utf8 NOT NULL ,
`real_name` char( 15 ) CHARACTER SET utf8 NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET = latin1;
    
INSERT INTO yonghuming
SELECT
    s.id_member AS `gmly_id_member`, 
    d.id_member AS `cdb_uid`, 
    s.member_name AS `member_name`,
    s.real_name AS `real_name`
FROM (smf_members AS s, smf_members_dz AS d)
WHERE d.member_name = s.member_name
    OR d.member_name = s.real_name
**发现插入输入后这个yonghuming表里有cdb_uid重复的行(同名马甲 T_T),会影响后面更新。所以需要删掉一些**
SELECT * FROM yonghuming WHERE cdb_uid in (select cdb_uid from yonghuming group by cdb_uid having count(cdb_uid) >1)
>>>>8.3
(SELECT * FROM `smf_topics_dz` AS t,  yonghuming AS y WHERE t.id_member_started = y.cdb_uid) 这句用来查看id_member_start重复的主题有多少
8.3.1 更新主题的发帖人id
UPDATE smf_topics_dz, yonghuming
SET smf_topics_dz.id_member_started = yonghuming.gmly_id_member
WHERE smf_topics_dz.id_member_started = yonghuming.cdb_uid;
参考 MySQL 5.1参考手册 13.2.10. UPDATE语法 的后面例子,KAO,SQL的例子语法就不是这样的,难怪一直有问题,坑爹啊。
8.3.2 更新主题的最后回帖人id
8.3.3 更新帖子作者的id
UPDATE smf_messages_dz, yonghuming
SET smf_messages_dz.id_member = yonghuming.gmly_id_member
WHERE smf_messages_dz.id_member = yonghuming.cdb_uid
8.4
delete from smf_members_dz where smf_members_dz.id_member in (select yonghuming.cdb_uid from yonghuming);
======================= 9 ==========================
UPDATE smf_members_dz, smf_messages_dz, smf_topics_dz
SET smf_members_dz.id_member = smf_members_dz.id_member + 13139,
    smf_messages_dz.id_member = smf_messages_dz.id_member + 13139,
    smf_topics_dz.id_member_started = smf_topics_dz.id_member_started + 13139;
SELECT * FROM yonghuming WHERE cdb_uid in (select cdb_uid from yonghuming group by cdb_uid having count(cdb_uid) >1)
INSERT INTO `gmly`.`smf_members` SELECT * FROM `gmly`.`smf_members_dz`;
176568 -7958 = 168610
168585
标签: 老福特smf

相关文章

虽然QQ空间很脑残……

虽然QQ空间很脑残……

但我大概会搬过来!太多人用这个了啊,初中朋友、高中朋友、大学朋友……我大概会搬过来!!...

subaru的笔记2:bmf转smf——多少年前的老黄历了啊

subaru的笔记2:bmf转smf——多少年前的老黄历了啊

/*先将 bmb 下的 userlist, forumdata(复制之前 一定 重新编辑bmb版块所属分类), threads, posts 复制到smf数据库里,这里设bmb的表前缀为gmly_,smf的表前缀为smf_ 转换所有表前请清空目标表原有内容*//*=======convert use...

WordPress数据库的清理

WordPress数据库的清理

WordPress逐渐在给新版本集成一些不实用的功能,比如修订、自动保存、回收站等等。这是很奇怪的事情,因为那些不能算是核心功能,本可以交给插件去实现的,现在却因为集成在wp中,容易造成数据库垃圾。清理插件生成的表格就不消说了,除了下面这几个,其他都不是wp的必需品,可删之。但除了会生成表格外,很多...

让WordPress运行多个博客的插件:WP-Hive

让WordPress运行多个博客的插件:WP-Hive

WP-Hive这个插件,允许WordPress用户在只安装一个WordPress的情况下,却能建立和运行多个博客。所以,如果不是想建立一个多用户博客的话,杀鸡就不必用牛刀了,WordPress MU还是别折腾了。但使用WP-Hive的前提是你拥有至少一个属于自己的顶级域名。假设你已经安装了一个Wo...

到此为止

到此为止

我宣称永不更新了之后,忽然想起《凡尔赛玫瑰》分类下的文章我早已写完却并未更新完毕……好了,现在可以真正宣布这个决定——这个空间不再更新了。我也不打算再写博客了。419巴黎照片在新浪相册,不是我拍的,是朋友传给我的。至于文字说明,不必找我要,我不会去写。如果我给出的第一个链接你已经打不开了,那么看这个...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法和观点。