多个论坛整合成一个论坛的方法

如果是小数据,建议使用白乐天的工具。但是大数据是收费的,我在这里说一下思路。
我以整合用户和帖子两部分数据为例说明。
一、用户数据。
基本的方式可以参考多论坛整合共用同一UC的方法
过程可能比较繁琐,也很有可能出错,所以操作前务必做好备份。
首先要说明mysql的操作是用navicat进行的,比phpmyadmin要方便的多。
条件设定:
有两个论坛分别为bbs1和bbs2,设定bbs1为主论坛,bbs2为从论坛。bbs1用的数据库为sql1,bbs2用的数据库为sql2。将bbs2搬到bbs1上,与bbs1共用同一个uc1。
1.备份bbs1的所有表到bak1,备份bbs2的所有表到bak2。备份是重要的一步,我相信任何一个站长都知道应该备份,但是不得不再废话一次!
2.将bak1中的uc_members和cdb_members复制为uc1_members和cdb1_members;将bak2中的uc_members和cdb_members复制为uc2_members和cdb2_members
3.将DZ6.1安装包中的utilities\upgrade10.php复制到bbs2根目录下(论坛根目录),并执行,按提示操作,记下uid的偏移量x。
4.升级bak2中uc2_members和cdb2_members的uid

代码:

UPDATE uc2_members SET uid=uid+x;
UPDATE cdb2_members SET uid=uid+x;

如果uid+x后与现有uid重复,则会报错。可以先加个较大的值Y后,再减去一个Z,只要x=Y-Z就可以了。
5.将uc2_members和cdb2_members复制到bak1中,追加members数据

代码:

replace INTO `uc1_members` (`uid`,`username`,`password`,`email`,`regip`,`regdate`,`salt`)
SELECT `uc2_members`.`uid`,`uc2_members`.`username`,`uc2_members`.`password`,`uc2_members`.`email`,`uc2_members`.`regip`,`uc2_members`.`regdate`,`uc2_members`.`salt`
FROM `uc2_members`;

代码:

replace INTO `cdb1_members` (`uid`,`username`,`password`,`gender`,`adminid`,`groupid`,`regip`,`regdate`,`lastip`,`lastvisit`,`lastactivity`,`lastpost`,`posts`,`oltime`,`pageviews`,`credits`,`extcredits1`,`extcredits2`,`extcredits6`,`extcredits7`,`extcredits8`,`email`,`bday`,`sigstatus`,`showemail`,`newsletter`,`timeoffset`,`editormode`,`customshow`)
SELECT `cdb2_members`.`uid`,`cdb2_members`.`username`,`cdb2_members`.`password`,`cdb2_members`.`gender`,`cdb2_members`.`adminid`,`cdb2_members`.`groupid`,`cdb2_members`.`regip`,`cdb2_members`.`regdate`,`cdb2_members`.`lastip`,`cdb2_members`.`lastvisit`,`cdb2_members`.`lastactivity`,`cdb2_members`.`lastpost`,`cdb2_members`.`posts`,`cdb2_members`.`oltime`,`cdb2_members`.`pageviews`,`cdb2_members`.`credits`,`cdb2_members`.`extcredits1`,`cdb2_members`.`extcredits2`,`cdb2_members`.`extcredits6`,`cdb2_members`.`extcredits7`,`cdb2_members`.`extcredits8`,`cdb2_members`.`email`,`cdb2_members`.`bday`,`cdb2_members`.`sigstatus`,`cdb2_members`.`showemail`,`cdb2_members`.`newsletter`,`cdb2_members`.`timeoffset`,`cdb2_members`.`editormode`,`cdb2_members`.`customshow`
FROM `cdb2_members`;

cdb_members中的extcredits字段是自定义的,请根据实际情况增删。经简单测试,cdb_members不更新并不影响登录,有兴趣做测试的朋友测试一下多给点反馈意见。
6.比较bak1中uc1_members、cdb1_members和bbs1中uc_members、cdb_members各字段的值除password外是否相同,如果相同,那么恭喜你距离成功只差一步了。
7.用bak1中uc1_members、cdb1_members替换bbs1中uc_members、cdb_members。登录测试,成功!
二、帖子数据。
1.首先要查一下bbs1中的一些值,包括fid、fup、tid、pid,假设四者的最大值分别为fid1、fup1、tid1、pid1,记录四个值。
2.将两个备份库中的表复制到一起,bbs1的表前缀重命名为cdb1,bbs2的表前缀重命名为cdb2。
3.升级版块相关id

代码:

UPDATE cdb2_forums SET fid=fid+fid1;
UPDATE cdb2_forums SET fup=fup+fup1;
UPDATE cdb2_threads SET fid=fid+fid1;
UPDATE cdb2_posts SET fid=fid+fid;

4.升级主题相关id

代码:

UPDATE cdb2_threads SET tid=tid+tid1;
UPDATE cdb2_posts SET tid=tid+tid1;

5.升级帖子相关id

代码:

UPDATE cdb2_posts SET pid=pid+pid1;

6.升级用户相关id,这里的x就是上面合并用户时记下的值

代码:

UPDATE cdb2_threads SET authorid=authorid+x;
UPDATE cdb2_posts SET authorid=authorid+x;

7.合并版块

代码:

replace INTO `cdb1_forums` (`fid`,`fup`,`type`,`name`,`status`,`displayorder`,`styleid`,`threads`,`posts`,`todayposts`,`lastpost`)
SELECT `cdb2_forums`.`fid`,`cdb2_forums`.`fup`,`cdb2_forums`.`type`,`cdb2_forums`.`name`,`cdb2_forums`.`status`,`cdb2_forums`.`displayorder`,`cdb2_forums`.`styleid`,`cdb2_forums`.`threads`,`cdb2_forums`.`posts`,`cdb2_forums`.`todayposts`,`cdb2_forums`.`lastpost`
FROM `cdb2_forums`;

8.合并主题

代码:

replace INTO `cdb1_threads` (`tid`,`fid`,`author`,`authorid`,`subject`,`dateline`,`lastposter`,`views`,`replies`)
SELECT `cdb2_threads`.`tid`,`cdb2_threads`.`fid`,`cdb2_threads`.`author`,`cdb2_threads`.`authorid`,`cdb2_threads`.`subject`,`cdb2_threads`.`dateline`,`cdb2_threads`.`lastposter`,`cdb2_threads`.`views`,`cdb2_threads`.`replies`
FROM `cdb2_threads`;

9.合并帖子

代码:

replace INTO `cdb1_posts` (`pid`,`fid`,`tid`,`first`,`author`,`authorid`,`subject`,`dateline`,`message`,`useip`,`invisible`,`anonymous`,`usesig`,`htmlon`,`bbcodeoff`,`smileyoff`,`parseurloff`,`attachment`,`rate`,`ratetimes`,`status`)
SELECT `cdb2_posts`.`pid`,`cdb2_posts`.`fid`,`cdb2_posts`.`tid`,`cdb2_posts`.`first`,`cdb2_posts`.`author`,`cdb2_posts`.`authorid`,`cdb2_posts`.`subject`,`cdb2_posts`.`dateline`,`cdb2_posts`.`message`,`cdb2_posts`.`useip`,`cdb2_posts`.`invisible`,`cdb2_posts`.`anonymous`,`cdb2_posts`.`usesig`,`cdb2_posts`.`htmlon`,`cdb2_posts`.`bbcodeoff`,`cdb2_posts`.`smileyoff`,`cdb2_posts`.`parseurloff`,`cdb2_posts`.`attachment`,`cdb2_posts`.`rate`,`cdb2_posts`.`ratetimes`,`cdb2_posts`.`status`
FROM `cdb2_posts`;

10.以上操作仅仅针对用户和帖子数据,其他数据并未合并,请参照上面的方法将其他需要合并的表一一改过。
11.新建一个论坛,然后用改过的表替换新建论坛中相应的表,登录测试有没有问题,然后到后台更新缓存,重建计数。OK!
本人不懂程序,我想如果写成程序来做应该要方便的多。如果有人有兴趣的话,可以参照方法写个程序出来方便大家。
特别强调:此操作非常危险,如非测试准确无误不可以用于使用中的论坛。因操作失误带来的损失本人不负责。

Leave a comment

Your comment