手动使用SQL语句删除织梦DEDECMS系统中文章内容为空以及字数少于

时间:2014-06-22 20:50:23来源:作者:点击:

前一段时间,用DEDECMS做的一齐鲁都市网(www.qldsw.com),采集了一些好文章,可能是由于那采集系统的问题,后来发现,好多文章的内容没采集到,是空的,也发到了网站上,感觉很不爽,织梦后台里提供了清空内容为空的文章,可是发现并不好用,有些空文章还是删除不了,而有些文章不是空的,只是采到了几个字,这些无法清除,于是就手动来清除这个文章.开始是一个一个文章找,一个一个来删除,后来觉得太累了,文章太多,不可能一个一个找,于是就到后台再找找,看看有没有什么可以用的.
突然发现后台里提供了一个功能[SQL命令运行器],对啊,我可以直接到数据库删除那些数据就可以了. [SQL命令运行器]功能不错,上方列出了所有表,而且提供了三个表功能:[优化表],[修复表],[查看表结构]. 列出的这些表名后面还显示了这个表里有多少记录,根据文章数量,一看就看到了第一个表的数量和文章数量一样,想必就是它了dede_addonarticle ,查看一下表结构,字段很少,如下: 本文来自齐鲁站长站


--------------------------------------------------------------------------------
CREATE TABLE `dede_addonarticle` (
`aid` int(11) NOT NULL default '0',
`typeid` int(11) NOT NULL default '0',
`body` mediumtext,
PRIMARY KEY (`aid`),
KEY `typeid` (`typeid`)
) TYPE=MyISAM 本文来自齐鲁站长站

--------------------------------------------------------------------------------
应该就是这个[body]字段.于是查询一下,看看有多少没内容或内容字数少于30的
--------------------------------------------------------------------------------
select * from dede_addonarticle where length(body)<30
--------------------------------------------------------------------------------
找到了,果然有一些,接下来,就删除啦.
--------------------------------------------------------------------------------
delete from dede_addonarticle where length(body)<30
--------------------------------------------------------------------------------

www.qlzhan.com

 

删除后,再看了看其他表,又发现一表的数据量和文章数是一样的[dede_archives],查看一下其结构如下:
--------------------------------------------------------------------------------
CREATE TABLE `dede_archives` (
`ID` int(11) unsigned NOT NULL auto_increment,
`typeid` int(11) unsigned NOT NULL default '0',
`typeid2` int(11) unsigned NOT NULL default '0',
`sortrank` int(11) NOT NULL default '0',
`iscommend` smallint(6) NOT NULL default '0',
`ismake` smallint(6) NOT NULL default '0',
`channel` int(11) NOT NULL default '1',
`arcrank` smallint(6) NOT NULL default '0',
`click` int(11) unsigned NOT NULL default '0',
`money` smallint(6) NOT NULL default '0',
`title` varchar(80) NOT NULL default '',
`shorttitle` varchar(36) NOT NULL default '',
`color` varchar(10) NOT NULL default '',
`writer` varchar(30) NOT NULL default '',
`source` varchar(50) NOT NULL default '',
`litpic` varchar(100) NOT NULL default '', 本文来自山东站长网
`pubdate` int(11) NOT NULL default '0',
`senddate` int(11) NOT NULL default '0',
`arcatt` smallint(6) NOT NULL default '0',
`adminID` int(11) NOT NULL default '0',
`memberID` int(11) unsigned NOT NULL default '0',
`description` varchar(250) NOT NULL default '',
`keywords` varchar(60) NOT NULL default '',
`templet` varchar(60) NOT NULL default '',
`lastpost` int(11) NOT NULL default '0',
`postnum` int(11) NOT NULL default '0',
`redirecturl` varchar(150) NOT NULL default '',
`mtype` int(11) NOT NULL default '0',
`userip` varchar(20) NOT NULL default '',
`locklikeid` smallint(6) NOT NULL default '0',
`likeid` varchar(240) default '',
PRIMARY KEY (`ID`),
KEY `click` (`click`),
KEY `senddate` (`senddate`),
KEY `typeid` (`typeid`),
KEY `arcrank` (`arcrank`),
KEY `sortrank` (`sortrank`),
KEY `pubdate` (`pubdate`),
KEY `litpic` (`litpic`),
KEY `typeid2` (`typeid2`)
) TYPE=MyISAM

--------------------------------------------------------------------------------
内容还真多,看看,感觉这个应该也是文章相关的表啊,看来,我之前太急了,应该和这个一起删,后来问了一下DEDECMS的QQ群上的[肥龙龙],果然是两个表关联的,通过dede_addonarticle.aid与dede_archives.id关联,前面那个表存储文章内容,后者存储标题,关键字,阅读次数,等.
没办法,再想办法来删除这个表里的吧.
以前没用过MYSQL,我直接用MSSQL的SQL方法,用嵌套查询,找出dede_archives这个表里所有不在dede_addonarticle里的记录(因为之前我已经删除了前一个表里内容为空的文章了).
--------------------------------------------------------------------------------
select *
from dede_archives
where
NOT EXISTS
(select aid
from dede_addonarticle
where dede_archives.id!=dede_addonarticle.aid)

本文来自山东站长网

 

--------------------------------------------------------------------------------
结果怎么也运行不了.试了好多次,也问了同学,都说语句没问题啊就是显示不了.后来,突然想到,原来MYSQL4.0.28之前的版本不支持嵌套查询.狂晕.还好,还有另一种方法,那就是join.如下:
--------------------------------------------------------------------------------
select *
from dede_archives t1
left join dede_addonarticle t2 on t1.id=t2.aid
where t2.aid is null

齐鲁站长站

 

--------------------------------------------------------------------------------
结果显示正确,正是我刚刚删除的那些记录.于是狂击键盘,输入以下代码,运行,马上成功:)

--------------------------------------------------------------------------------

www.qlzhan.com

 


DELETE dede_archives t1
from dede_archives t1
left join dede_addonarticle t2 on t1.id=t2.aid
where t2.aid is null


--------------------------------------------------------------------------------

山东站长网

 

重新生成静态网页,搞定,收功. 齐鲁站长站

总结一下:
第一点: 织梦DEDECMS(版本名称:DedeCms OX 版本号:4_0RC1 ),它的文章是分别存储在两个表里面([dede_addonarticle],[dede_archives]),通过dede_addonarticle.aid与dede_archives.id关联,删除文章时,应该删除两个表里的记录.
第二点: 本次手动删除内容为空或者字数少于30的文章,分了两步分别删除两个表,总结代码如下:

1: 查询查看要删除的文章情况的代码:

select * from dede_addonarticle where length(body)<30

2: 删除内容表.

delete from dede_addonarticle where length(body)<30

3: 查询查看要删除的文章情况的第二个表的代码:

select *

from dede_archives t1

left join dede_addonarticle t2 on t1.id=t2.aid

where t2.aid is null

4: 删除第二个表.

Delete dede_archives

from dede_archives

left join dede_addonarticle   on dede_archives.id=dede_addonarticle.aid

where dede_addonarticle.aid is null

5: 查询查看要删除的文章情况的第三个表的代码:

select *

from dede_arctiny t1

left join dede_addonarticle t2 on t1.id=t2.aid

where t2.aid is null

6: 删除第三个表.

Delete dede_arctiny

from dede_arctiny

left join dede_addonarticle   on dede_arctiny.id=dede_addonarticle.aid

where dede_addonarticle.aid is null

如果你不查看的话,直接执行第2,4步就可以了 本文来自齐鲁站长站

您可能感兴趣的文章

  • 《天天酷跑》锦标赛版本更新内容一览
  • 一次强化终身受益!揭秘《西楚霸王》装备保值系统
  • win8系统输入法出现卡死无法输入中文怎么办
  • win8系统将极速PDF阅读器设为默认阅读器的方法
  • Win7系统打开程序弹出乱码记事本的解决办法
  • Xp系统下查看计算机所有程序的方法
  • 苹果OS X系统迎来15周岁生日!转眼已过15年
  • Win7系统开机显示正在配置Windows Update请勿关机的处
  • Win8.1系统下超级管理员帐户的开启方法
  • xp系统下Windows自动更新选项不能用怎么办
  • 文章评论