操作前请先备份数据,有啥问题小弟不负责哈。。。。。
▌去重
最近利用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