═╬簡箪√嗳

 找回密码
 立即注册
搜索
查看: 4889|回复: 0

phpwind 9.0 转换到 X3 版块丢失的问题解决方案

[复制链接]
发表于 2014-6-4 17:20 | 显示全部楼层 |阅读模式
转自: http://www.discuz.net/thread-3450451-1-1.html
问题描述
转换后,有些分类丢失,转换版块过程中出现数据库错误提示,类似
115930a4awaqciy9acx9av.jpg.thumb.jpg


问题转换程序
http://www.discuz.net/thread-3251327-1-1.html

起因
pw9 如果是新安装的没有这个问题。
pw9 如果不是新安装的,而是从 pw87 升级上来的然后再转换就有这个问题

原理
pw87 中的 pw_forumsextra 表中版块分类并没有数据
pw87 升级到 pw9 后 pw_bbs_forum_extra 中版块分类并没有增加,只是把 pw_forumsextra 的数据添加进来了
然后此时转换 pw9 到 Discuz! X3

打开该转换程序中的
XConver_pw85_87_90_to_X3/data/phpwind/pw90 - 3 X/step_3.php
其中
  • SELECT f.*, bfs.*, bfe.* FROM {$source_tablepre}bbs_forum f
  •                                                                         LEFT JOIN {$source_tablepre}bbs_forum_statistics bfs ON f.fid=bfs.fid
  •                                                                         LEFT JOIN {$source_tablepre}bbs_forum_extra bfe ON f.fid=bfe.fid
  •                                                                         ORDER BY f.fid ASC

复制代码

如果将此 sql 放到 phpmyadmin 里查询,如图
120405gl5ml419mnmr99zl.jpg.thumb.jpg


因为版块分类没有数据,所以最后取到的 $pwforum[fid] 将会是 null
写入 pre_forum_forum 时 fid 会写成0,如果多个分类没数据,就会出现多条fid 为0 的数据,写入时自然要报 duplicate 的错误了。

解决方案
其实这个地方应该是不需要联 bbs_forum_extra 这个表的,因为在循环中有判断如果 fup 非空,就去查询bbs_forum_extra
所以把 XConver_pw85_87_90_to_X3/data/phpwind/pw90 - 3 X/step_3.php 中的
  • $query = $xc->db['source']->query("SELECT f.*, bfs.*, bfe.* FROM {$source_tablepre}bbs_forum f
  •                                                                         LEFT JOIN {$source_tablepre}bbs_forum_statistics bfs ON f.fid=bfs.fid
  •                                                                         LEFT JOIN {$source_tablepre}bbs_forum_extra bfe ON f.fid=bfe.fid
  •                                                                         ORDER BY f.fid ASC") or dexit();

复制代码

改成
  • $query = $xc->db['source']->query("SELECT f.*, bfs.* FROM {$source_tablepre}bbs_forum f
  •         LEFT JOIN {$source_tablepre}bbs_forum_statistics bfs ON f.fid=bfs.fid
  •         ORDER BY f.fid ASC") or dexit();

复制代码

即可。

补充说明
多表联合查询时,如果字段名有重复的,要注意覆盖关系,或者使用别名。
另外
如果改完之后不是全部重新转换,而是单独转换版块的话,记得转换完版块的后面那一步主题分类也重新转一下。要不然分类就没有了。








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

本版积分规则

QQ|Archiver|手机版|小黑屋|═╬簡箪√嗳's BBS

GMT+8, 2024-4-23 22:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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