盼望着,盼望着,我的论坛终于全部合并完毕。
合并后的论坛详见:
http://bbs.lznews.cn这里要感谢戏水妹妹的大力支持。现在将论坛合并的前后经过记录下来,希望能给大家有合并需求的一点帮助。
我原来的论坛是动网专业版(拿银子买的),从2002年至今会员16705人,主题26075,帖子总数119241篇,数据库mdf:258M,ldf:2.26G,要转移是有很大的风险的。说心里话,动网的论坛也是不错的,无论从功能还是其他方面都优于这个论坛,但是促使我转移我的论坛是因为第一,针对动网的流氓广告太多,严重影响到我的论坛的运作,第二是discuz的品牌和对.net的期待与情感,因为我前端时间一直在用.net 2.0进行“音乐100网”(
http://www.song100.cn)的开发。
2007年1月中旬我正式进行网站的转移工作。
但是一开始转移工作不是很理想,大量的数据丢失。由于5年来我的论坛栏目改来改去,后来决定放弃原来的数据,但是保留原有的用户数据。这一切进行的很顺利。2007年1月23日,论坛正式启用。旧论坛只能浏览不能发贴。
可是一段时间以来,论坛的老网友一直抱怨不方便,这样又促使我将旧论坛的数据进行转移与合并。但是还是和以前一样,论坛的转移还是出现很多错误,此后戏水对该程序进行了修改,网上的网友也发现是由于大量相同主题引起的错误,网友qiubai803提出了解决方案:
http://nt.discuz.net/showtopic-9614.html SELECT TOP 100 PERCENT *
FROM dv_topic
WHERE (title IN
(SELECT title
FROM dv_topic
GROUP BY title
HAVING COUNT(*) > 1)) and title is not null
ORDER BY title DESC
由于我的重复数据太多,索性我全部删除了这些重复的东西。
delete dv_topic
WHERE (title IN
(SELECT title
FROM dv_topic
GROUP BY title
HAVING COUNT(*) > 1)) and title is not null
用戏水提供的最新转换工具成功的对论坛的数据进行了转移,虽然丢失了450条数据,但是我还是很满意的。下面就要进行两个网站的合并了。
合并的具体过程我就不说了,我只说注意事项吧。
1、首先注意论坛各个分类的id(fid)是不是有一样的,如果有新建个分类(不要是重复的fid),将数据转过去,将fid重复的分类删除。
2、需要合并的表:
dnt_attachments
dnt_forums
dnt_forumfields
dnt_posts1
dnt_topics
3、将上述5个表从一个论坛数据库导入到另外的数据库中,并改名字(可以后面加个1进行区分)
4、进行dnt_forums、dnt_forumfields的合并
参考下列语句
insert into dnt_forums (fid, parentid, layer, pathlist, parentidlist, subforumcount, name, status, colcount, displayorder, templateid, topics, curtopics, posts, todayposts, lasttid,
lasttitle, lastpost, lastposterid, lastposter, allowsmilies, allowrss, allowhtml, allowbbcode, allowimgcode, allowblog, allowtrade, alloweditrules,
recyclebin, modnewposts, jammer, disablewatermark, inheritedmod, autoclose
) selectfid, parentid, layer, pathlist, parentidlist, subforumcount, name, status, colcount, displayorder, templateid, topics, curtopics, posts, todayposts, lasttid,
lasttitle, lastpost, lastposterid, lastposter, allowsmilies, allowrss, allowhtml, allowbbcode, allowimgcode, allowblog, allowtrade, alloweditrules,
recyclebin, modnewposts, jammer, disablewatermark, inheritedmod, autoclose
from dnt_forums1
3、检索dnt_topics的最大tid值如为10000,参考下列语句进行dnt_posts1、dnt_topics的合并,注意tid和pid等相关字段要增加一个值(这里是10000)
INSERT INTO dnt_topics
(tid, fid, iconid, typeid, readperm, price, poster, posterid, title, postdatetime, lastpost, lastpostid, lastposter, lastposterid, views, replies, displayorder,
highlight, digest, rate, hide, poll, attachment, moderated, closed, magic)
SELECT tid + 10000 AS Expr1, fid, iconid, typeid, readperm, price, poster, posterid, title, postdatetime, lastpost, lastpostid + 10000 AS Expr2, lastposter,
lastposterid, views, replies, displayorder, highlight, digest, rate, hide, poll, attachment, moderated, closed, magic
FROM dnt_topics1
4、用户表你也可以按上述方案进行,我没有导,因为我的新的论坛用户表是包含原来的数据的。但是如果用户表导入的话要先进行,也要按上述原理进行id的增加,另外还要先处理重复的用户名。之后再进行上面的数据表导入,相应的用户id也要增加相应的值。这点头脑一定清醒,否则就会出大错。
5、至此论坛在后台更新之后,数据基本没什么问题,但是你会发现被导入的数据中图片出现了问题,这个是由于上传图片的表现是用id号进行调用的。解决方法还是首先依据上述办法进行nt_attachments表的合并,同时注意aid、tid、pid的增量问题,这点有了上述的经验很好解决。
其次最重要也是最麻繁的是对正文相关内容的替换,请参考我下列语句:
UPDATE dnt_posts1 SET message = REPLACE(CAST(message AS varchar(8000)), ']901[', ']36052[') WHERE (postdatetime > '2007-1-23') AND (postdatetime < '2007-3-8') AND (message LIKE '%]901_/at%')
由于我需要导入的数据非常多1000多,手工显然不行,我考虑编程,由于我的水平问题,总是执行超时,后来想个简单的办法,利用discuz的后台执行sql语句,并在每个sql语句之间插入--/* Discuz!NT SQL Separator */-- ,我编了一个批量生成sql语句的程序,一次生成100条,执行了10次(每次执行时间很长,大约2~3分钟),一切ok了。
有什么问题大家可以在此留言或者到我的论坛提出来,协助你进行解决。
http://bbs.lznews.cn/showtopic-155713.html最后还是感谢戏水妹妹的大力支持!!