PHPCMS用SQL语句对文章进行批量删除

来自:互联网
时间:2018-08-26
阅读:

在批量删除文章前,首先得熟悉用数据库增加一篇文章时变动的有哪些表,所以请先看我以前写的一篇文章 PHPCMS数据库入库模块制作教程

先手动在PHPCMS后台添加一篇文章,参数尽可能的详细,附件,推荐位,相关文章,能加的都加上,然后查看数据库,把表信息复制下来,删除文章后再次复制数据库表信息,用BeyondCompare进行比较,方法跟上面提到的文章相同。

通过比较发现以下几个表有所变动

v9_attachment、v9_attachment_index、v9_hits、v9_log、v9_news、v9_news_data、v9_position_data、v9_search

实际上PHPCMSV9删除文章并不完善,其实还有2个表中的内容也应该删除,它们的作用是用来存储文章关键字,以及哪些文章用了同一个关键字,这2个表分别为 v9_keyword 和 v9_keyword_data

其中 v9_log 表不用理会,他记录的是 后台操作日志,记录着增加文章,删除文章,编辑文章的操作日志

重点关注的数据表

v9_attachment 附件信息
v9_attachment_index 附件id和文章id的关系
v9_hits 文章点击次数
v9_news 文章主要信息
v9_news_data 文章内容及相关信息
v9_position_data 记录有推荐位的文章有哪些
v9_search 文章搜索词,搜索表中记录的词显示对应的文章
v9_keyword 文章关键字
v9_keyword_data 文章和关键字的关系

删除一篇文章要牵扯到这么多表,分析将会是一个浩大的工程啊!

咱们就以删除指定分类下的所有文章为例;首先得获取到要删除的文章id有哪些,然后就是了解各个表跟文章id的关系,以下是我的分析

表v9_attachment_index 字段keyid格式 c-6-3、c-7-5,第2个参数6、7为分类id,第3个参数3、5为文章id;通过keyid可以获取到对应的AId,而这里的aid跟表v9_attachment的aid是一一对应的,所以通过aid可以同时删除表v9_attachment和表v9_attachment_index的内容

表v9_hits中字段hitsid格式c-1-2、c-1-3 其中第3个参数2、3为文章id

表v9_news和表v9_news_data中的字段id即为文章id,且他们的id是一一对应的,可以很方便的同时删除这2个表中的信息

表v9_position_data 字段id即为文章id

表v9_search 字段id即为文章id

表v9_keyword_data 字段 contentid 格式 2-1、3-1,前面的数字2、3为文章id;字段tagid为关键字id,与表 v9_keyword中的id字段对应,也可以很方便的同时删除这2个表的信息

以下是完整的PHP代码:

<?php
MySQL_connect("localhost", "root", "");
mysql_select_db("pc");
$catid=7;
$getid="SELECT `id` FROM `v9_news` WHERE `catid`=$catid";
$ids=mysql_query($getid);
while($row=mysql_fetch_row($ids)){
$getaid=mysql_query("SELECT `aid` FROM `v9_attachment_index` WHERE `keyid`='c-$catid-$row[0]'");
$aids=mysql_fetch_row($getaid);
mysql_query("DELETE v9_attachment,v9_attachment_index FROM v9_attachment INNER JOIN v9_attachment_index ON v9_attachment.aid=v9_attachment_index.aid WHERE v9_attachment.aid=$aids[0]");
mysql_query("DELETE FROM v9_hits WHERE hitsid='c-1-$row[0]'");
mysql_query("DELETE v9_news,v9_news_data FROM v9_news INNER JOIN v9_news_data ON v9_news.id=v9_news_data.id WHERE v9_news.id=$row[0]");
mysql_query("DELETE FROM v9_position_data WHERE id =$row[0]");
mysql_query("DELETE FROM v9_search WHERE id =$row[0]");
$gettagid=mysql_query("SELECT `tagid` FROM `v9_keyword_data` WHERE `contentid`='$row[0]-1'");
while($tagids=mysql_fetch_row($gettagid)){
mysql_query("DELETE v9_keyword,v9_keyword_data FROM v9_keyword INNER JOIN v9_keyword_data ON v9_keyword.id=v9_keyword_data.tagid WHERE v9_keyword.id=$tagids[0]");
}
}
echo '执行成功';
?>
返回顶部
顶部