Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑问] 数据库数据操作求助

[复制链接]
!^vOv^! 发表于 2011-12-2 14:24:31 | 显示全部楼层 |阅读模式
本帖最后由 !^vOv^! 于 2011-12-2 14:28 编辑

问题:      
老论坛是smthBBS的,也就是kbs,了解一点kbs的人都知道,kbs的每一条数据都是存放在一个文件中的[包括附件],在win下面该文件可以用记事本之类的编辑器打开,而在linux下面直接通过编辑器编辑。

       老论坛现在停用了,想把kbs中的帖子数据恢复出来导入discuz的数据表中,目前的状况是:帖子都导入到mysql数据表了[pre_forum_post],简称post,一个帖子一条记录,并在此基础上建立的pre_forum_thread表[通过帖子表中thread字段的唯一性建立],简称thread,大家都知道,discuz是通过fid的值读取thread表中的主题,然后通过tid在post表中读取某一个主题下面的所有帖子,而我现在的kbs数据表只是一条一条的记录,每一条帖子都不知道他是那个主题下面的帖子,不过每一条帖子记录都有一个字段存放了一个字符串,改字符串说明他是哪个主题下面的帖子。注意不是tid,是字符串!
      我现在的问题就是要通过具有唯一性的表thread,和post表中的上述字段[说明帖子所属主题的字符串字段],将thread表中的tid同步到post表中的tid字段,使得所有属于同一主题的帖子记录的tid字段[post表中]都等于thread表中相应主题的tid字段值,这样子就可以用discuz来读取kbs中导出来的数据了;对于fid和tid采取一样的思路进行操作。
       但问题是我kbs的数据有上百万条,主题数有好几十万条,自己写了一个for嵌套循环去跑,速度实在太慢。
附上数据表截图和自己写的for嵌套循环,等待大牛们替我想一个效率更高的做法,先谢谢咯~
thread表:

post表:

目的重申:将两张表中的tid修改为一样的,条件是他们所在的记录中的主题字段中的字符串相同
我自己写的工具:
  1. <?php
  2. //此脚本用来连接thread表和post表
  3. $link = mysql_connect('localhost', 'root', 'toor');
  4. if (!$link) {
  5.     die('Could not connect: ' . mysql_error());
  6. }
  7. //链接数据库
  8. mysql_select_db("data",$link);
  9. //设置php反应时间为无穷
  10. set_time_limit(0);


  11. //链接post表和thread表450857 95488
  12. for ($i = 1; $i <= 366314; $i++)  //366314为主题总数
  13. {
  14.         
  15.         $subject = mysql_query("SELECT subject FROM pre_forum_thread WHERE tid = '$i'");
  16.         $subject = mysql_result($subject,0);

  17.         for ($j = 1; $j <= 999999; $j++)  //999999为帖子总数
  18.         {
  19.                         
  20.                         $psubject = mysql_query("SELECT subject FROM pre_forum_post WHERE pid = '$j'");
  21.                         $psubject = mysql_result($psubject,0);
  22.             
  23.                         if($subject === $psubject){
  24.                   
  25.                                 mysql_query("UPDATE pre_forum_post SET tid = '$i' WHERE pid = '$j'");
  26.                         
  27.                         }else{
  28.                                 
  29.                         continue;
  30.                         
  31.                         }
  32.         }
  33.         
  34. }


  35. echo " OK<hr />";
复制代码


file:///C:\Users\csubbs\AppData\Roaming\Tencent\Users\2549693797\QQ\WinTemp\RichOle\{8AA@)`B3Z~OPXGKQGF}]`Q.jpg

wf_0613 发表于 2011-12-2 15:24:17 | 显示全部楼层
没用过kbs的,哎
回复

使用道具 举报

12153556 发表于 2011-12-2 15:37:30 | 显示全部楼层
嘿嘿

告诉你个简单的方法,用火车头采集入库吧

现在的火车可以做到:原帖时间、原帖用户、原帖附件、原帖回复

至于会员的话,可以等采集完成了,再对比导入
回复

使用道具 举报

 楼主| !^vOv^! 发表于 2011-12-2 15:39:52 | 显示全部楼层
12153556 发表于 2011-12-2 15:37
嘿嘿

告诉你个简单的方法,用火车头采集入库吧

采集KBS么?系统上面的KBS早就挂了,就剩备份的数据了
回复

使用道具 举报

12153556 发表于 2011-12-2 16:25:26 | 显示全部楼层
!^vOv^! 发表于 2011-12-2 15:39
采集KBS么?系统上面的KBS早就挂了,就剩备份的数据了

下载个KSB,重新配置好后再采集就可以了嘛
回复

使用道具 举报

wangpengyun 发表于 2011-12-2 16:33:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| !^vOv^! 发表于 2011-12-2 16:36:47 | 显示全部楼层
12153556 发表于 2011-12-2 16:25
下载个KSB,重新配置好后再采集就可以了嘛

求详情,有现成的么?
回复

使用道具 举报

 楼主| !^vOv^! 发表于 2011-12-2 16:38:00 | 显示全部楼层
wangpengyun 发表于 2011-12-2 16:33
那是什么啊??

哪个?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-6-2 12:32 , Processed in 0.096957 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表