网站公告 |
联系客服1
联系客服2

WordPress 通过SQL批量删除指定目录的文章

878
回复
6322
查看
[复制链接]

13

主题

5854

帖子

100

积分

会员

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
100
发表于 2019-5-24 00:00:00 | 显示全部楼层 |阅读模式

本文讲述的是 WordPress 通过SQL批量删除指定目录文章的方法。起因是夜火的一个采集站,因为时间久了,数据量过大,总数据量有4~5W条了,对数据库有奇怪的操作,频繁读写硬盘,拖累整个VPS的速度,影响同VPS其他站点,故忍痛删除数据量最庞大的一个分类文章,约3W条数据。

        但是问题来了,WordPress 后台想删除的话,只能20还是30条的删,删多了就超时失败,而且数据库臃肿,删除20~30条也得等半天,导致删了几个小时也没删掉多少,无奈只能通过phpmyadmin进行 SQL 批量删除。

        进入phpmyadmin之后,找到wp_posts表,发现根本没有分类的字段,我就纳闷了半天,难道WP那么高级,连分类都不用字段标识?那前台怎么进行分类显示的啊?于是就研究了起来,四处翻表,四处查找。最终还是通过搜索查到了一点资料:WordPress直接访问数据库列出指定分类目录下的所有文章,才知道,原来WP的分类都是写在wp_term_relationships这个表里,通过文章ID和分类ID或tag的ID对应来进行分类。

        知道这些,就好办多了。通过引用文章里介绍的sql语句进行查询删除就行了,但是因为那篇文章写的比较早,对应的WP版本,数据库结构可能有所不同,需要进行修改一下,当然,我这里所说的WordPress 通过SQL批量删除指定目录文章的方法也是针对目前的wordpress 3.3.1版本。

引用文章提供的SQL语句:

  1. select ID,post_title,post_date,post_name from wp_posts,wp_term_relationships,wp_term_taxonomy where ID=object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and post_type=’post’ and post_status = ‘publish’ and wp_term_relationships.term_taxonomy_id = $CID and taxonomy = ‘category’ order by ID desc
复制代码

经过我修改之后的语句(这里我要删除的特定目录ID就是26):

  1. select ID,post_title,post_date,post_name from wp_posts,wp_term_relationships,wp_term_taxonomy where ID=object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and wp_term_relationships.term_taxonomy_id = 26
复制代码

稍微精简的语句(只查询出要查找的ID):

  1. select ID from wp_posts,wp_term_relationships,wp_term_taxonomy where ID=wp_term_relationships.object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and wp_term_relationships.term_taxonomy_id = 26
复制代码

中间为了找到删除的方法变形的3个语句(具体的思路经过1天1夜和酒精的摧残已经想不起来了):

  1. select * from wp_posts where wp_posts.id in (select wp_posts.id from wp_posts,wp_term_relationships,wp_term_taxonomy where wp_posts.id=wp_term_relationships.object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and wp_term_relationships.term_taxonomy_id = 26)
  2. select * from wp_posts where wp_posts.id in (select wp_posts.id from wp_posts,wp_term_relationships,wp_term_taxonomy where wp_posts.id=wp_term_relationships.object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and wp_term_relationships.term_taxonomy_id = 26)
  3. delete * from wp_posts where wp_posts.id in (select wp_posts.id from wp_posts,wp_term_relationships,wp_term_taxonomy where wp_posts.id=wp_term_relationships.object_id and wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id and wp_term_relationships.term_taxonomy_id = 26)
复制代码

中间因为delete语句老是报错,于是搜了下关于mysql delete数据的语法:对MySQL DELETE语法的详细解析,才知道自己写的不对,哪里要那么多的select那么多的括号,查那么多的表,直接delete from ... using ... where ....就行了。下面是最终的,WordPress指定特定目录删除下面所有文章的语句:

游客,有隐藏内容,查看请回复

这就是我奋斗到凌晨1点半的结果,希望后来的诸位共勉之,不要像我一样走那么多弯路,神啊,原谅我这个不懂MySql的人吧~

2012.03.10 update:

(1)wp_posts 进行完上面的删除操作之后,需要对表进行一下优化(phpmyadmin后台界面操作),不然还是原来好几百M。

(2)wp_term_relationships 也需要删除对应的文章分类关系,不然记录条数和原来的wp_posts 一样,好几W条。

查询看下是不是:
SELECT * FROM `wp_term_relationships` where term_taxonomy_id=26

删除:
delete FROM `wp_term_relationships` where term_taxonomy_id=26

同样几W条记录消灭掉,最后记得优化下表。

(3)最后把wp_term_taxonomy里的分类文章数量计数的几W count 给归零,这个可以直接通过phpmyadmin直接界面操作
UPDATE `wp_term_taxonomy` SET `count` = '0' WHERE `wp_term_taxonomy`.`term_taxonomy_id` =26 LIMIT 1 ;


回复

使用道具 举报

0

主题

5987

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:00:01 | 显示全部楼层
沙发~支持楼主,支持10万社区社区,希望10万社区社区越办越好.
回复

使用道具 举报

0

主题

5935

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:00:17 | 显示全部楼层
太棒了,感谢楼主,10万社区是我家维护靠大家.
回复

使用道具 举报

10

主题

6599

帖子

50

积分

会员

Rank: 10Rank: 10Rank: 10

积分
50
发表于 2019-5-24 00:02:53 | 显示全部楼层
好东西一定要看看!
回复

使用道具 举报

11

主题

6052

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:13:37 | 显示全部楼层
楼主,10万社区就你长得这么帅这么漂亮你家人知道吗?~
回复

使用道具 举报

2

主题

5999

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:13:42 | 显示全部楼层
太棒了,感谢楼主,10万社区是我家维护靠大家.
回复

使用道具 举报

10

主题

6517

帖子

90

积分

会员

Rank: 10Rank: 10Rank: 10

积分
90
发表于 2019-5-24 00:13:44 | 显示全部楼层
看帖看完了至少要顶一下,还可以加入到淘帖哦!
回复

使用道具 举报

0

主题

6099

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:14:29 | 显示全部楼层
看了LZ的帖子,我只想说一句很好很强大!
回复

使用道具 举报

2

主题

6631

帖子

60

积分

会员

Rank: 10Rank: 10Rank: 10

积分
60
发表于 2019-5-24 00:15:41 | 显示全部楼层
哈哈!楼主大人你太好笑了.10万社区社区最搞笑的人莫过于你啊!
回复

使用道具 举报

2

主题

5889

帖子

0

积分

会员

Rank: 10Rank: 10Rank: 10

积分
0
发表于 2019-5-24 00:16:55 | 显示全部楼层
果断回帖,如果沉了就是我弄沉的很有成就感
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站创立于2018年,已运行,感谢一路相伴

Archiver手机版小黑屋 八零游戏资源网 ( 冀ICP备20003924号-1 )

Powered by Discuz! X3.4   © 2001-2013 Comsenz Inc.