subaru的笔记2:bmf转smf——多少年前的老黄历了啊
这里设bmb的表前缀为gmly_,smf的表前缀为smf_ 转换所有表前请清空目标表原有内容*/
/*=======convert users(or members)=========
转换时忽略了用户所属的用户组(除管理员外),故需要重新在smf里设置版主等人员*/
TRUNCATE smf_members;
INSERT INTO smf_members
SELECT
userid, username, regdate, postamount, IF(ugnum = 0,1,0) AS ID_GROUP,
NULL, lastlogin, username, 0, 0, NULL, NULL, NULL, pwd,
mailadd, NULL, 0, "0001-01-01", NULL, NULL, NULL,
NULL, NULL, NULL, NULL, 0, 1, NULL, signtext, 0, NULL,
0, 0, 0, NULL, 1, 1, 0, 2, NULL AS memberIP, pwdask,
pwdanswer, 0, 1, NULL, 0, NULL, NULL, 0, 0, NULL
FROM gmly_userlist;
–=============转换分类============
/*准备工作
1038107847 【本站站务】 11
1090474717 【古墓丽影综合讨论】 12
1090475426 【古墓丽影自制关卡讨论区】 19
1090483164 【会员交流区】 20
1094392525 【古墓玩家灵感空间】 21
1094392531 古墓丽影1-3代 22
1094392538 访客留言 23
1094392539 会员相册 24
1094392540 动作冒险 25
1094392541 玩家攻略 26
1124110813 【其他游戏】 27
*/
UPDATE gmly_forumdata2
SET forum_cid =
WHERE forum_cid = ;
UPDATE gmly_forumdata2
SET id =
WHERE id = ;
UPDATE gmly_threads2
SET forumid =
WHERE forumid = ;
UPDATE gmly_posts2
SET forumid =
WHERE forumid = ;
—————————
TRUNCATE smf_categories;
INSERT INTO smf_categories
SELECT id, showorder, bbsname, 1
FROM gmly_forumdata
WHERE type = "category";
–================转换版块==================
/*之后可能还要在smf里重新编辑一下顺序。转换后的版块权限修改为smf默认的游客和正式会员都可以浏览,游客不能发帖*/
TRUNCATE smf_boards;
INSERT INTO smf_boards
SELECT
id, forum_cid, 0, 0, showorder, 0, 0,
"-1,0", bbsname, cdes, topicnum,
replysnum + topicnum, 0, 0, 0, 0
FROM gmly_forumdata
WHERE type != "category";
–========convert topics===========
TRUNCATE TABLE smf_topics;
INSERT INTO smf_topics
SELECT
t.tid AS ID_TOPIC, 0 AS isSticky, t.forumid AS ID_BOARD,
MIN(p.id) AS ID_FIRST_MSG, MAX(p.id) AS ID_LAST_MSG,
p.usrid AS ID_MEMBER_STARTED, 0 AS ID_MEMBER_UPDATED,
0 AS ID_POLL, t.replys AS numReplies, t.hits AS numViews,
t.islock AS locked
FROM (gmly_threads AS t, gmly_posts AS p)
WHERE p.tid = t.id
GROUP BY t.id
HAVING ID_FIRST_MSG != 0
AND ID_LAST_MSG != 0;
–=========convert posts(messages in smf)=========发帖心情全改为默认
/*看看
INSERT INTO smf_messages
SELECT
p.id, p.tid, p.forumid, p.timestamp, p.usrid,
p.id, p.articletitle, p.username, u.mailadd,
p.ip, 1, IF(p.timestamp = p.changtime, 0, p.changtime),
REPLACE(p.other4, LEFT(p.other4, 17), ""),
REPLACE(p.articlecontent, ‘<br>’, ‘<br />’), "xx"
FROM (gmly_posts AS p, gmly_userlist AS u)
WHERE u.userid = p.usrid;
注意上面这个=,由于发现在posts表里有一些usrid=0,这样where出来就没结果,这一行就会被跳过,
为了避免此种情况,我想是不是可以在用户表里间建一个id为零的,或者,用下面新方法*/
TRUNCATE TABLE smf_messages;
INSERT INTO smf_messages
SELECT
p.id, p.tid, p.forumid, p.timestamp, u.userid,
p.id, p.articletitle, p.username, u.mailadd,
p.ip, 1, IF(p.timestamp = p.changtime, 0, p.changtime),
REPLACE(p.other4, LEFT(p.other4, 17), ""),
REPLACE(p.articlecontent, ‘<br>’, ‘<br />’), "xx"
FROM (gmly_posts AS p, gmly_userlist AS u)
WHERE u.username = p.username;
–=============最后在smf后台 论坛维护 -> 一般维护 -> 重新计算论坛所有的统计资料
/////////
UPDATE gmly_forumdata2
SET id = 22
WHERE id = 1094392531;
UPDATE gmly_threads2
SET forumid = 22
WHERE forumid = 1094392531;
UPDATE gmly_posts2
SET forumid = 22
WHERE forumid = 1094392531;
UPDATE gmly_forumdata2
SET id = 23
WHERE id = 1094392538;
UPDATE gmly_threads2
SET forumid = 23
WHERE forumid = 1094392538;
UPDATE gmly_posts2
SET forumid = 23
WHERE forumid = 1094392538;
UPDATE gmly_forumdata2
SET id = 24
WHERE id = 1094392539;
UPDATE gmly_threads2
SET forumid = 24
WHERE forumid = 1094392539;
UPDATE gmly_posts2
SET forumid = 24
WHERE forumid = 1094392539;
UPDATE gmly_forumdata2
SET id = 25
WHERE id = 1094392540;
UPDATE gmly_threads2
SET forumid = 25
WHERE forumid = 1094392540;
UPDATE gmly_posts2
SET forumid = 25
WHERE forumid = 1094392540;
UPDATE gmly_forumdata2
SET id = 26
WHERE id = 1094392541;
UPDATE gmly_threads2
SET forumid = 26
WHERE forumid = 1094392541;
UPDATE gmly_posts2
SET forumid = 26
WHERE forumid = 1094392541;


