几天前把数据从DvBBS6.0转到VBB,原来以为一切正常。后来发现有个版面,显示有13篇文章,但进去后怎么都只有9篇。摸索了半天发现是post表的许多文章没有收录到thread中,仔细一看不得了,我论坛2/3的帖子,大概16000篇,都成了孤魂野鬼了。幸好thread的从属结构都还没错。于是开始尝试修复。
刚开始我用手动修改的办法,对着post表的内容,在thread表建立新条目。后来发现实在太慢,于是想到直接用SQL查询实现。思路是这样的:
1、从post表提取threadid,查询它在thread表中是否存在,如果不存在,而且该条记录的parentid=0,那么就在thread表建立一条新纪录,同时直接从post提取相应数据添加过去。
2、更新新建立的thread表里的条目,因为通过第一步建立的thread都没有相应的forumid,所以这里指定一个。最好是新建立一个临时的版面。然后通过手动转移帖子的方式把帖子转移到相应版面。同时这一步也更新其他一些字段,比如open,visible,views等。由于浏览次数的数据早已丢失,这里也只能随便指定一个数字。
3、进入论坛设置——维护——更新计数器——重建主题信息。会重建主题的最后回复数据以及回帖数等。然后你可以进入临时版面移动文章了。OK.
下面是SQL命令:
INSERT INTO `vb3_thread` ( `threadid` , `title` , `firstpostid` , `lastpost` , `postusername` , `postuserid` , `lastposter` , `dateline` )
SELECT `threadid`, `title`, `postid`, `dateline`, `username`,`userid`, `username`, `dateline`
FROM `vb3_post` WHERE `threadid` NOT IN (SELECT `threadid` FROM `vb3_thread`) AND `parentid`=0 AND (`postid` BETWEEN 1 AND 3000)
说明:这里指定每次查询3000条。查询完成之后修改相应postid数字继续执行即可。
UPDATE `vb3_thread` SET `forumid` =1120, `open`=1, `views`=40, `iconid`=1, `visible`=1 WHERE `forumid` =0
说明:这里需要指定新建立的临时版面数据,否则帖子还是无法显现并手工移动。


