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

时间:2023年09月22日

/

来源:网络

/

编辑:佚名

这篇文章是为了自己维护的一个帝国站做准备的。
所有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即可。然后再是插入到临时表中。
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。