typecho 在mysql中去掉重复数据 typecho 查重、去重

操作前请先备份数据,有啥问题小弟不负责哈。。。。。

去重

最近利用typecho建了一个网站,后端用了pyspider爬虫来填写部分内容,后来多次重启爬虫程序导致mysql出现重复数据。最后不得不将mysql中重复的数据去掉。**下面这个只是简单根据标题是否一样来判断是否有重复内容。**具体代码:

delete `typecho_contents`
   from `typecho_contents`
  inner join (
     select max(cid) as lastId, title
       from `typecho_contents`
      group by `title`
     having count(*) > 1) duplic on duplic.title = typecho_contents.title
  where typecho_contents.cid < duplic.lastId;

上面这段代码只去掉typecho_contents中重复的内容,如果你的typecho有自定义字段或者tags和分类,这些是去掉不了的。
对了,上面这些操作需要在mysql中的query操作。


去重,更新(2020年1月21日):

这个更新版本是根据标题和创建时间来判断是否有重复内容。

删除typecho_fields的自定义字段

  delete `typecho_fields`
from
	`typecho_fields`
	inner join (
		select
			max(cid) as lastId,
			title,
			cid,
			created
		from
			`typecho_contents`
		group by
			`title`,
			`created`
		having
			count(*) > 1
	) duplic on duplic.cid = typecho_fields.cid
where
	typecho_fields.cid < duplic.lastId

删除typecho_relationships的cid记录

  delete `typecho_relationships`
from
	`typecho_relationships`
	inner join (
		select
			max(cid) as lastId,
			title,
			cid,
			created
		from
			`typecho_contents`
		group by
			`title`,
			`created`
		having
			count(*) > 1
	) duplic on duplic.cid = typecho_relationships.cid
where
	typecho_relationships.cid < duplic.lastId

最后再删除typecho_contents的重复内容

delete `typecho_contents`
from
	`typecho_contents`
	inner join (
		select
			max(cid) as lastId,
			title,
			created
		from
			`typecho_contents`
		group by
			`title`,
			`created`
		having
			count(*) > 1
	) duplic on duplic.title = typecho_contents.title
	and duplic.created = typecho_contents.created
where
	typecho_contents.cid < duplic.lastId;

查重

如果只是想简单查重的话,下面代码可以实现:

版本一

只根据标题title来判断是否重复内容

select `title`
        from `typecho_contents`
       group by `title`
      having count(*) > 1

版本二

根据标题title创建时间created来判断是否重复内容。
为啥会有这个呢?有时候爬虫的时候会重复爬,是标题和创建时间都一样。

select `title`,`created`
        from `typecho_contents`
       group by `title`,`created`
      having count(*) > 1

参考:MySQL delete duplicate records but keep latest

阅读量: | 柯西君_BingWong | 2020-01-12