论坛转换网's Archiver

Godboss 发表于 2009-4-1 23:00

diszcuz 重新调整 fid /gid ,应该如何操作

你好
SQL我略懂一些
但是我对 diszcuz  的数据不了解
不清楚
储存 fid 的是哪张表
可否指点一下
谢谢

Godboss 发表于 2009-4-2 10:20

补充说明:

我在建论坛前期,经常改版面, 少不了建了版块又删掉。。。
时间长了,就发现一个问题
我目前 fid 最大的已经有 1001 了
我仔细查了一下  
其实目前的版块只有 近  30个
fid 50 ---1000  之前的 都是以前删了,
现在论坛我又想增加版块了,  重建后fid 自然从 1002 开始了
但是  50 - 1000 之间的这一段 ,不就浪费了么。
我想 利用上,

请示援助,谢谢!  不甚感激:handshake

白乐天 发表于 2009-4-2 10:51

不要重复发贴。我想好就会回复。

白乐天 发表于 2009-4-2 11:15

依次执行以下13句话,可以把版块重新排序。

[b][color=Red]执行之前一定作好数据备份,发现问题就恢复,不保证一定成功。有几条语句极其消耗资源,尽量选择服务器空闲时执行[/color][/b]


[quote]ALTER TABLE `cdb_forums` ADD `oldfid` smallint(6) UNSIGNED NOT NULL

update cdb_forums set oldfid=fid

ALTER TABLE `cdb_forums` DROP `fid`

ALTER TABLE `cdb_forums` ADD `fid` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST

update cdb_forums f1,cdb_forums f2 set f1.fup=f2.fid where f1.fup=f2.oldfid and f1.fup<>0

update cdb_forumfields fd,cdb_forums f set fd.fid = f.fid where fd.fid=f.oldfid

update cdb_favorites fa,cdb_forums f set fa.fid = f.fid where fa.fid=f.oldfid

update cdb_forumrecommend fr,cdb_forums f set fr.fid = f.fid where fr.fid=f.oldfid

update cdb_moderators m,cdb_forums f set m.fid = f.fid where m.fid=f.oldfid

update cdb_posts p,cdb_forums f set p.fid = f.fid where p.fid=f.oldfid

update cdb_threads t,cdb_forums f set t.fid = f.fid where t.fid=f.oldfid

update cdb_virtualforums v,cdb_forums f set v.fid = f.fid where v.fid=f.oldfid

ALTER TABLE `cdb_forums` DROP `oldfid` [/quote]

执行后更新缓存即可。

Godboss 发表于 2009-4-2 11:38

白老大,出了点小问题
[quote]升级错误,MySQL 提示: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update cdb_forums set oldfid=fidALTER TABLE `cdb_forums` DROP `fid` ALTER TABLE ' at line 1 ,请返回。[/quote]

Godboss 发表于 2009-4-2 11:43

我刚建了个测试版块,也没有成功

请老大,帮我看看
谢谢!

白乐天 发表于 2009-4-2 12:11

我说的是依次执行,不是整篇一起执行。

Godboss 发表于 2009-4-2 18:24

我刚刚在公司测试过了
一切OK

谢谢老大

Test 发表于 2009-5-10 14:59

老大 你这个6.0的能用吗?
我也想整理下 但是最后倒数第二句语句的时候就出现错误提示:


升级错误,MySQL 提示: Table 'sq_netx.cdb_virtualforums' doesn't exist ,请返回

白乐天 发表于 2009-5-10 17:53

这是for dz7的。6.0的话跳过倒第2句即可

Test 发表于 2009-5-10 21:32

感谢。。。呵呵!

Test 发表于 2009-5-10 22:03

还是不行。。算了 不整理了 这个玩意太麻烦了

只不过一个坛子FID都到上百了 看着有点别扭

Test 发表于 2009-5-21 11:46

成功了。。。哦也。。。

按照大佬的提示 6.0的去掉倒数第二行之后 整理成功

不过我提醒下大家

这个整理完了之后 不是能让你的版面按照UID数字顺序排列

只是让所有版面的FID数字连贯起来

白乐天 发表于 2009-5-21 14:43

板块显示次序是后台自己设置的,并不依赖FID

82076322 发表于 2009-8-28 10:08

[quote]执行之前一定作好数据备份,发现问题就恢复,不保证一定成功。有几条语句极其消耗资源,尽量选择服务器空闲时执行




执行后更新缓存即可。
[size=2][color=#999999]白乐天 发表于 2009-4-2 11:15[/color] [url=http://www.bbstobbs.com/redirect.php?goto=findpost&pid=815&ptid=127][img]http://www.bbstobbs.com/images/common/back.gif[/img][/url][/size][/quote]
这个dz7.0可以使用么?

白乐天 发表于 2009-8-29 12:47

可以用,但不建议做这种没意义的事

swdsky 发表于 2010-4-29 10:09

7.2能用么?

白乐天 发表于 2010-4-29 13:29

不能。不建议做这种没意义的事。

Godboss 发表于 2010-5-6 00:55

升级到  7。2后,

竟然也可以用

不过会出一点小问题

运行:[code]运行:update cdb_moderators m,cdb_forums f set m.fid = f.fid where m.fid=f.oldfid[/code]会出提示:
[quote]升级错误,MySQL 提示: Duplicate entry '25022-31' for key 1 ,请返回。[/quote]


运行:[code]update cdb_virtualforums v,cdb_forums f set v.fid = f.fid where v.fid=f.oldfid[/code]会提示:[quote]升级错误,MySQL 提示: Table 'guwanwo.cdb_virtualforums' doesn't exist ,请返回。[/quote]


虽然白老大的意思是
这没什么意义,但事实上,还真有不少人确是需要。
恳请 白老大再提供一份
7.0  /7.2  ,还有 X

汇集于一帖,造福后人。 感激 ing

sgoon 发表于 2011-10-4 16:33

我的7.1没有出现楼上的错误 我在7.1的时候重新排列过了。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.