通过sql/代码向discuz数据库表中插入帖子所涉及的部分表,包括主题信息、分类信息、标签信息(不处理附件)

作者: admin 分类: 环境搭建 发布时间: 2019-08-16 11:40  阅读: 35 views

Discuz! X3.4 适用,人工通过sql向discuz数据表中查数据,能够正常显示分类信息、主题信息、标签信息等

可前期处理的元数据

  1. 向主题分类元数据表 pre_forum_threadclass 中增加主题分类信息,获得分类typeid
  2. 向分类信息元数据表 pre_forum_typeoption 中增加分类信息,获得标识主键
  3. 向标签元数据表 pre_common_tag 增加标签信息,获取tagid

帖子生成

  1. 向主题表 pre_forum_thread 中增加版块ID、用户ID、用户名、帖子标题、发帖时间、主题分类(取自第1步)、分类信息(取自第2步)等信息。 获得tid
  2. 向分表协调表 pre_forum_post_tableid 增加一条数据,这张表中只有一个自增字段。获得pid
  3. 向标签帖子表关联表pre_common_tagitem 增加关联数据,取自第3、5步, idtype为帖子id,固定为’tid’ 【这个不设置,无法根据标签查询相关帖子】
  4. 向帖子表 pre_forum_post 中插入帖子相关信息,: pid,tid取自第4、5步,tags取自第三步的【tid,name】

更新相关数据

  1. 更新版块 pre_forum_forum 相关主题、帖子数量信息
  2. 更新用户 pre_common_member_count 帖子数量信息
  3. 其他相关积分表等按需查询处理

附上 discuz的数据字典
http://www.dz7.com.cn/library/database/

附上java的相关逻辑


try { //插入帖子协调表信息 int maxId = preForumPostTableidMapper.getMaxId(); PreForumPostTableid pfpt = new PreForumPostTableid(); pfpt.setPid(maxId + 1); preForumPostTableidMapper.insertSelective(pfpt); int pfptid = maxId + 1; //先插入主题表 PreForumThread preForumThread = new PreForumThread(); preForumThread.setTypeid(typeId); //没有启用主题分类,不要设置这个默认为0 preForumThread.setSortid(sortid); //启用分类信息需要设置 preForumThread.setAuthor(userName); preForumThread.setAuthorid(Integer.parseInt(userId)); preForumThread.setLastposter(userName); preForumThread.setSubject(law.getFinalTitle()); //必须设置, // preForumThread.setDateline(dateline); // preForumThread.setLastpost(lastpost); preForumThreadMapper.insertSelective(preForumThread); int tid = preForumThread.getTid(); //插入分类信息关联帖子表 for(PreForumTypeoption pft:list) { PreForumTypeoptionvar preForumTypeoptionvar = new PreForumTypeoptionvar(); preForumTypeoptionvar.setFid(forumId); preForumTypeoptionvar.setTid(pfptid); preForumTypeoptionvar.setSortid(sortid); preForumTypeoptionvar.setOptionid(pft.getOptionid()); if(pft.getIdentifier().equals(CommonTypeOption.law_inner_fwzh)) { preForumTypeoptionvar.setValue(law.getTextNumber()); }else if(pft.getIdentifier().equals(CommonTypeOption.law_inner_xljb)) { preForumTypeoptionvar.setValue(law.getLevel()); }else if(pft.getIdentifier().equals(CommonTypeOption.law_inner_sxx)) { preForumTypeoptionvar.setValue(law.getEffective()); }else if(pft.getIdentifier().equals(CommonTypeOption.law_inner_fbrq)) { preForumTypeoptionvar.setValue(law.getPubTime()); }else if(pft.getIdentifier().equals(CommonTypeOption.law_inner_ssrq)) { preForumTypeoptionvar.setValue(law.getImpTime()); }else if(pft.getIdentifier().equals(CommonTypeOption.law_inner_fbjg)) { preForumTypeoptionvar.setValue(law.getOrganize()); }else {//如果没有找到,跳出本次循环 logger.info("插入分类信息时,没有找到对应的typeOption信息,{} ",pft.toString() ); continue; } preForumTypeoptionvarMapper.insertSelective(preForumTypeoptionvar); } //插入标签元数据 PreCommonTag existPreCommonTag = preCommonTagMapper.selectByName(law.getOriginTitle()); int tagId = 0; if(existPreCommonTag == null) { PreCommonTag preCommonTag = new PreCommonTag(); preCommonTag.setTagname(law.getOriginTitle()); preCommonTag.setStatus(PreCommonTag.STATUS_0); //正常状态 preCommonTagMapper.insertSelective(preCommonTag); tagId = preCommonTag.getTagid(); }else { tagId = existPreCommonTag.getTagid(); } //插入标签-帖子关关联表 PreCommonTagitem preCommonTagitem = new PreCommonTagitem(); preCommonTagitem.setIdtype(PreCommonTagitem.IDTYPE_TID); preCommonTagitem.setTagid(tagId); preCommonTagitem.setItemid(pfptid); preCommonTagitemMapper.insertSelective(preCommonTagitem); //插入帖子表 PreForumPost preForumPost = new PreForumPost(); preForumPost.setPid(pfptid); preForumPost.setFid(forumId); //板块id preForumPost.setTid(tid); preForumPost.setAuthor(userName); preForumPost.setAuthorid(Integer.parseInt(userId)); preForumPost.setSubject(law.getFinalTitle()); preForumPost.setMessage(law.getContext()); preForumPost.setUseip("0.0.0.0"); String tags = tagId +","+ law.getOriginTitle() ; preForumPost.setTags(tags); preForumPost.setFirst(true); preForumPostMapper.insertSelective(preForumPost); //更新板块数量 PreForumForum preForumForum = preForumForumMapper.selectByPrimaryKey(forumId); PreForumForum newFf = new PreForumForum(); newFf.setFid(preForumForum.getFid()); newFf.setPosts(preForumForum.getPosts() + 1); newFf.setTodayposts(preForumForum.getTodayposts() + 1); // // newFf.setLastpost(lastpost); preForumForumMapper.updateByPrimaryKeySelective(preForumForum); //更新用户 PreCommonMemberCount preCommonMemberCount = preCommonMemberCountMapper.selectByPrimaryKey(Integer.parseInt(userId)); PreCommonMemberCount newPc = new PreCommonMemberCount(); newPc.setUid(Integer.parseInt(userId)); newPc.setPosts(preCommonMemberCount.getPosts() + 1); preCommonMemberCountMapper.updateByPrimaryKeySelective(newPc); }catch(Exception e) { e.printStackTrace(); } return 1;

注意以下两个地方

1.
//pre_forum_thread表中的以下两个必须设置,否则管理后台显示不出来
// preForumThread.setDateline(dateline);
// preForumThread.setLastpost(lastpost);

2.
//pre_forum_post表中的字段以下必须设置,否则前台的分类信息无法展示
// preForumPost.setFirst(true);


   原创文章,转载请标明本文链接: 通过sql/代码向discuz数据库表中插入帖子所涉及的部分表,包括主题信息、分类信息、标签信息(不处理附件)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读