|
转自: http://www.discuz.net/thread-3450451-1-1.html
问题描述
转换后,有些分类丢失,转换版块过程中出现数据库错误提示,类似
问题转换程序
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 里查询,如图
因为版块分类没有数据,所以最后取到的 $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();
复制代码
即可。
补充说明
多表联合查询时,如果字段名有重复的,要注意覆盖关系,或者使用别名。
另外
如果改完之后不是全部重新转换,而是单独转换版块的话,记得转换完版块的后面那一步主题分类也重新转一下。要不然分类就没有了。 |
|
|
|