原创

帝国cms使用sql批量删除重复文章

这篇文章是为了自己维护的一个帝国站做准备的。

所有SQL执行前,都请做好该有的备份,帝国的备份功能很强大,请一定要执行,不然届时出了任何问题,请不要哭鼻子,也不要找我,跟我没关系。

从网上采集了大量的内容后,发现很多重复的记录存在,所以需要删除一波,当然系统自带了特技可以直接找到重复记录并且删除,系统的这种做法对于记录数不多的站来说,很好用,但是对于百万级的数据量来说,就有点不够用了(刷新列表速度慢的一笔),为此我特地找了帝国cms的表结构,并且参考对应表结构,找到了删除的方式,从sql中删除记录,会导致一个问题,如果前台已经生成了html静态页面的时候,是不会对应删除的,考虑到成百上千万的数据量,这点没用的静态页面也就很可笑了。

我的思路如下:

首先查找重复记录-》将重复记录的id记录到临时表中-》删除附表内对应标题的记录-》删除主表内对应id的记录-》进入后台刷新全部点一遍(数据量巨他妈的大的情况下,最少也要点下更新缓存记录中的几个链接)

前提:

建表语句:

CREATE TABLE `djc8_temp` (
  `title` text NOT NULL
) ;

临时表可以很简单,需要去除重复行达到记录重复记录的功能

10位的数字应该能满足大多数需求。

找到你要删除的记录栏目对应的数据表,具体可以在:系统-》系统表与数据模型-》管理数据表中找到,找到之后确定对应的表明,比如我新闻表:phome_ecms_news 是这个,那么对应的附表就是以这个开头的phome_ecms_news_data_1,_2_3等。

之后编写查询,我是根据文章的标题来进行判断是否重复记录的。

插入重复记录sql如下:

INSERT INTO djc8_temp
SELECT ID FROM PHOME_ECMS_NEWS 
WHERE TITLE IN (
	SELECT title FROM phome_ecms_news 
	GROUP BY title HAVING COUNT(*)>1
)

子查询先查出所有重复的记录,并且返回对应的标题,之后通过外头的查询查出对应标题对应的ID即可。然后再是插入到临时表中。

本文来自:帝国cms使用sql批量删除重复文章-小码农,转载请保留本条链接,感谢!

温馨提示:
本文最后更新于 2021年01月26日,已超过 1,241 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录