« 关于免费申请6位QQ的真相« »关于MySQL嵌套查询的技巧(转载) »
手动使用SQL语句删除织梦DEDECMS系统中文章内容为空以及字数少于X时的文章
前一段时间,用DEDECMS做的一JAVA学习站(www.javabus.cn)系统,采集了一些好文章,可能是由于那采集系统的问题,后来发现,好多文章的内容没采集到,是空的,也发到了网站上,感觉很不爽,织梦后台里提供了清空内容为空的文章,可是发现并不好用,有些空文章还是删除不了,而有些文章不是空的,只是采到了几个字,这些无法清除,于是就手动来清除这个文章.开始是一个一个文章找,一个一个来删除,后来觉得太累了,文章太多,不可能一个一个找,于是就到后台再找找,看看有没有什么可以用的. 突然发现后台里提供了一个功能[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
删除后,再看了看其他表,又发现一表的数据量和文章数是一样的[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
结果显示正确,正是我刚刚删除的那些记录.于是狂击键盘,输入以下代码,运行,马上成功:)
DELETE dede_archives 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 t1 left join dede_addonarticle t2 on t1.id=t2.aid where t2.aid is null 如果你不查看的话,直接执行第2,4步就可以了 参考了一些MYSQL数据库的资料,稍后发到[数据库编程]里,可以去看看哦![URL=http://http://www.busfly.cn/post/11.html]mysql 多表删除(多表连接查询很相似)[/URL] 和 关于MySQL嵌套查询的技巧(转载) 原创作品,转载请注明:转载自:巴士飞扬-专业技术BLOG(www.busfly.cn)
 


Tags: 织梦dede-CMS   |

原创文章如转载,请注明:转载自:巴士飞扬-技术BLOG : http://www.busfly.net/

本文链接地址:http://www.busfly.net/post/9.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
网站分类
分类最近文章
最近发表
最新评论及回复
最近留言
热文排行
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(J2EE为主):3769186.