帝国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,425 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
正文到此结束
- 本文标签: 无标签
- 本文链接: https://djc8.cn/archives/imperial-cms-uses-sql-batch-delete-duplicate-articles.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
该篇文章的评论功能已被站长关闭