2007-7-21 9:8:19
手动使用SQL语句删除织梦DEDECMS系统中文章内容为空以及字数少于X时的文章
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
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~