DZ论坛批量去除隐藏

文:铁乐猫

有需求对一个主题贴或多个主题贴在某段时间过后,例如铁血剧场论坛的演戏(语C )结束后要对之前设置了回复可见的众多主题贴解开隐藏贴。

传统的做法是由主题贴作者或版主或发贴的人编辑贴子去除掉”[hide]”和”[/hide]”这两个代码。

耗时还耗力,以致大多数宁愿置之不理或任由别人进来水贴以求一观隐藏贴显得主题就不美观了。

所以最省力的做法是在数据库中直接sql替换和去除掉hide。

pre_forum_post

查看dz的数据字典可知,pre_forum_post 属于贴子表(包括了所有主题贴和回贴)

pre_forum_post 帖子表

字段名数据类型默认值允许非空自动递增备注
pidint(10) unsignedNO帖子id
fidmediumint(8) unsigned0NO论坛id
tidmediumint(8) unsigned0NO主题id
firsttinyint(1)0NO是否是首贴
authorvarchar(15)NO作者姓名
authoridmediumint(8) unsigned0NO作者id
subjectvarchar(80)NO标题
datelineint(10) unsigned0NO发表时间
messagemediumtextNO消息
useipvarchar(15)NO发帖者IP
invisibletinyint(1)0NO是否通过审核
anonymoustinyint(1)0NO是否匿名
usesigtinyint(1)0NO是否启用签名
htmlontinyint(1)0NO是否允许HTML
bbcodeofftinyint(1)0NO是否关闭BBCODE
smileyofftinyint(1)0NO是否关闭表情
parseurlofftinyint(1)0NO是否允许粘贴URL
attachmenttinyint(1)0NO附件
ratesmallint(6)0NO评分分数
ratetimestinyint(3) unsigned0NO评分次数
statusint(10)0NO帖子状态
tagsvarchar(255)0NO新增字段,用于存放tag
commenttinyint(1)0NO是否存在点评
replycreditint(10)0NO回帖获得积分记录
positionint(8) unsignedNO帖子位置信息

其中我们此次需要关注的是tid字段和message字段即可。

tid

tid表示主题贴,同一个主题贴下的回贴它们的tid都是同一个数字,所以这样就可以很好的对它们做操作了。

而tid的查看在dz上也很简单,点击打开一个主题贴,它的url中就有包含了tid,例:

http://bbs.qingqiuyique.com/forum.php?mod=viewthread&tid=7219&extra=

当然,如果你要对一个范围内的主题贴进行操作,那就是之后在sql语句中where id的时候圈出范围就是了。

message

重要的字段,里面的内容就是贴子的内容。可以看到message中有包含[hide]和[/hide]

SQL语句

因为是对表字段内容中的部分字符串做替换,所以是update的操作,实例如下:

update pre_forum_post set message=replace(message, '[/hide]',' ') where tid = 7222;
update pre_forum_post set message=replace(message, '[hide]',' ') where tid = 7222;

逻辑来说就是:

update 表名 set 字段名 = replace( 字段名 ,'要被替换的字符串','替换后的字符串')where 生效的范围或条件;

大范围去隐藏

毕竟有些戏太多密谈贴了,选定从哪到哪之间:

update pre_forum_post set message=replace(message, ‘[/hide]’,’ ‘) where tid between 7296 and 7354;
update pre_forum_post set message=replace(message, ‘[hide]’,’ ‘) where tid between 7296 and 7354;

重要的是where 主题贴 between 从哪里 and 到哪里 之间。

例:

mysql> update pre_forum_post set message=replace(message, '[/hide]',' ') where tid between 7479 and 7504;
Query OK, 158 rows affected (0.02 sec)
Rows matched: 1811  Changed: 158  Warnings: 0

mysql> update pre_forum_post set message=replace(message, '[hide]',' ') where tid between 7479 and 7504;
Query OK, 156 rows affected (0.01 sec)
Rows matched: 1811  Changed: 156  Warnings: 0

区分版块

fid为版本号

update pre_forum_post set message=replace(message, '[/hide]',' ') where tid between 8390 and 8430 and fid = 99;

可以先select验证一下

select message from pre_forum_post where tid between 8390 and 8430 and fid = 99;

验证带hide的

select message from pre_forum_post where tid between 8390 and 8430 and fid = 99 and message LIKE '%hide%';

最终执行

update pre_forum_post set message=replace(message, '[hide]','') where tid between 8390 and 8430 and fid = 99;
update pre_forum_post set message=replace(message, '[/hide]','') where tid between 8390 and 8430 and fid = 99;

效果是fid=99的版本为菜市口的解锁隐藏了,而不影响到fid=98的玉书房。

发表评论

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

2 × 3 =