从数据库直接导入帖子到Discuz

[复制链接]
查看858 | 回复0 | 2019-6-8 03:14:55 | 显示全部楼层 |阅读模式
  由于我的一个网站必要晋级成聽discuz体系.聽以是必要把从前的帖子都导入到discuz中,聽聽固然也包罗从前的注册用户也必要导入到discuz中.聽聽导入用户的事变,聽待会写另一篇帖子说.聽聽先说导入帖子的事.
  从前完全不相识discuz聽的数据库布局.聽聽帖子究竟怎样存的,完全不晓得.聽聽从哪动手呢?
  先预备情况.
  1.聽当让先当地装置php情况,聽以便调试.聽保举聽WampServer聽Version聽.聽本身上网搜一下就晓得了,聽傻瓜操纵,一起next装置.
  2.聽装置discuz聽到当地.聽进程略.
  重点来了,聽聽从哪动手?聽聽(固然可以去找discuz的文档,聽但是我没有找到.)
  固然是从数据库自己动手最直接.聽聽聽想法十分简朴.聽聽聽就是手动发一个帖子,聽聽然后比照发帖前后数据库的差别,聽就晓得要发一个帖子,必要修正哪些数据了.
  但是怎样才气晓得数据库前后的差别呢.聽聽简朴,聽发帖前把数据库备份上去,聽发完贴再备份一次,聽比力这两次的差别.
  备份数据库的办法许多,聽但是那种方式最简朴直接,聽最能让人发现此中的差别呢?
  昨们晓得phpmyadmin聽这个神器,有一个功用就是导出数据库(大概导出此中的某些表).聽聽并且导出的是聽sql文件,聽全部的内容都是文本的明文.聽如许昨们只必要一个文本比力工具,就能比照差别了.
  为了完备起见,聽实在我也不晓得要导出哪些表,聽以是就选择导出整个数据库.聽聽先导出一份,聽origional.sql,聽聽聽手动去发个帖子,聽再导出一份,聽post.sql,聽留意都是导出整个数据库.聽聽还要留意的就是导出的时间,聽不能用疾速导出,聽要点开自界说选项,聽找到最上面的聽"转储数据时所利用的函数",聽改成聽replace,聽聽默许是insert.聽聽至于为什么,聽等会你就懂了.聽
源码多多:从数据库直接导入帖子到Discuz
  然后请出文本比力神器,聽beyond聽Compare.
  此中差别不多,聽出了一些更新用户积分之类的操纵之外,聽聽很快就定位到这两个表:
  pre_forum_post聽和聽pre_forum_thread
  细看这两个表的字段不难发现.
  post表应该指的是帖子,聽此中包罗了帖子全部字段,包罗标题,内容,工夫,作者等等.聽聽聽thread表表现的是全部主题帖子,聽聽但是thread表其实不包罗帖子的内容等具体信息,聽值包罗一个pid.聽这个pid就是post表的id.
  以是,聽全部的帖子,聽包罗主题帖子以及主题帖子上面的复兴应该都是作为一个post放在pre_forum_post表中的.聽聽而聽pre_forum_thread聽只记载主题帖子的信息,聽以及主题帖子对应的post的id.
  到这里,聽昨们就晓得了.聽聽我只必要导入帖子到聽post表中,聽而且,聽更新聽thread表.聽由于我每个帖子都是作为一个主题帖子导入的,聽不必要思量聽复兴的题目.
  此中的pid聽和tid聽都是逐一对应的.聽聽聽以是更新着两个表就行了.聽聽细节就不说了.
  直接导入.
  导入很顺遂,聽但是聽导入之后论坛翻开,首页,聽发现一个帖子也没有.聽但是各个板块点开内里有帖子聽聽呃,聽聽阐明昨们另有数据没有更新对.聽聽怎样办,聽再次细致比力差别.
  发现如许一个差别,聽在pre_forum_forum表中:
源码多多:从数据库直接导入帖子到Discuz
  这个表貌似是包罗了,聽每个版块的概要信息,聽就是论坛首页要表现的信息.
  好比每个版块的名字,聽每个版块总的发帖数,聽版块的设置.聽聽以及这个版块末了一个帖子的具体信息.聽包罗帖子标题,聽发帖工夫等等.
  就是这里用到的信息:
源码多多:从数据库直接导入帖子到Discuz
  晓得了这个,就好办了.聽昨们把帖子导入到post和thread表之后,聽在来这里更新聽版块的信息就好了.
  这里要更新几个详细的字段,
  threads:聽版块内的主题数.
  posts:聽版块内的帖子数.
  todayposts:聽版块内,聽本日发帖的个数.聽这个是post的个数,聽不是thread的个数.
  lastpost:聽这个字段比力奇葩,聽聽看名字它是表现本版块最新一个帖子.聽聽聽但它的值比力故意思,聽这是一个字符串,聽聽由四部门构成,聽每部门之间用聽\t聽制表符联系.聽聽第一部门是这个帖子的pid,聽聽第二部门是帖子的标题,聽第三部门是帖子的发帖工夫,聽第四部门是帖子的作者名.聽聽聽这个字段大概是为了进步论坛首页的功能,聽有了他之后,首页就担负轻了许多.
  其他的字段就不说了.
  按这个再来一次.聽聽聽起首必要把数据库复原到最开端没有导过的样子,聽聽怎样做?聽聽聽记得刚开端备份的聽origional.sql聽文件吗?聽把他导入到数据库中就好了啊.聽聽适才刚刚让选replase聽还记得吗,聽假如没有选replace的话,聽你如今导入时会失败的,不信你试试.
  言归正传.聽聽复原数据库->聽乐成.聽聽再次导入帖子(必要更新聽pre_forum_post聽,聽pre_forum_thread聽以及聽pre_forum_forum聽这三个表.),聽一起调试进程自不用说.聽聽假如此中有失败了,聽请重新复原数据库,聽再视.聽颠末数次调试之后.聽终于乐成了.
  这个时间翻开论坛首页,聽聽每个版块都能精确表现末了发帖信息,聽点开每个版块内里的帖子也都正常.聽聽都点频频也都没有题目.聽聽聽半途而废.....
  好了,上线.聽等等,聽我手一抖,聽咱发个帖子玩玩吧.聽点发帖.聽聽opps.......
源码多多:从数据库直接导入帖子到Discuz
  失败啦.....................聽聽肿么办.聽聽岂非是昨们把数据库改坏了?聽聽..........不会吧........................
  不要张皇,聽看看它说什么先.
  它在向post表中拔出新帖子的时间堕落了.聽说主键反复.聽聽它拔出的时间用的pid主键是1,聽聽但是我适才刚刚曾经导入了许多帖子了.聽1这个值在post表中早就被占了啊.聽固然会堕落了.聽聽聽聽但是希奇的是,聽pid原来就是自增的,聽为什么它在拔出新帖的时间还要强行指定一个pid呢?聽聽聽那这个强行指定的pid又是从哪来的呢.聽聽假如能晓得从哪来的,聽我就能把它改对了.
  它有堆栈信息,聽聽步伐员的最爱.聽一起翻开相应的文件.聽一探毕竟.
  在堆栈的第四层,聽就是聽function_form.php聽的941行找到了如下代码:
源码多多:从数据库直接导入帖子到Discuz
  看样子,聽它就是在这指定pid的.
  这里应该是在做分表,聽昨们晓得discuz有分表功用,聽就是帖子可以分表寄存,聽聽由于帖子太多的话,聽一个表就会低落功能.
  实在相识这个分表不紧张.聽聽紧张的是看聽pid从哪取的.
  这里有个表聽forum_post_tableid.聽聽这个表比力故意思.聽聽它只要一列pid,聽并且照旧自增的.聽聽聽下面的逻辑表现,聽当用户添加新帖子时,聽会先从这个表中自增一个pid作为帖子的id,聽聽然后再把帖子连带这个pid一同拔出到post表中.聽聽相识了这个,聽就明确了.聽聽昨们适才刚刚导入帖子的时间,聽pid用的是自增的值.聽聽这是纰谬的,聽聽应该先从forum_post_tableid表中自增一个pid,聽聽然后连同这个pid和帖子的内容一同拔出到post表中,聽而不该该直接用post表的自增值.
  晓得了这个,聽聽改步伐,再来.
  先复原数据库,聽不消说了吧.聽然后导入,聽聽颠末数次调试之后.聽终于经过了.聽导入完成.
  哈哈,聽等等,聽我发个帖子先.
源码多多:从数据库直接导入帖子到Discuz
  等等,聽我再发一个试试.聽.............................
  发帖乐成.
  到此,聽导入帖子的题目就办理了.
  打完出工.
  稍后,聽再分享一篇,聽聽怎样把曾经注册的用户聽也导入到discuz中.
  接待各人多多交换.
楼主热帖

3

主题

2

帖子

2

积分

普通用户

Rank: 1

积分
2