本文講述的是 WordPress 通過(guò)SQL批量刪除指定目錄文章的方法。起因是夜火的一個(gè)采集站,因?yàn)闀r(shí)間久了,數(shù)據(jù)量過(guò)大,總數(shù)據(jù)量有4~5W條了,對(duì)數(shù)據(jù)庫(kù)有奇怪的操作,頻繁讀寫(xiě)硬盤,拖累整個(gè)VPS的速度,影響同VPS其他站點(diǎn),故忍痛刪除數(shù)據(jù)量最龐大的一個(gè)分類文章,約3W條數(shù)據(jù)。 但是問(wèn)題來(lái)了,WordPress 后臺(tái)想刪除的話,只能20還是30條的刪,刪多了就超時(shí)失敗,而且數(shù)據(jù)庫(kù)臃腫,刪除20~30條也得等半天,導(dǎo)致刪了幾個(gè)小時(shí)也沒(méi)刪掉多少,無(wú)奈只能通過(guò)phpmyadmin進(jìn)行 SQL 批量刪除。 進(jìn)入phpmyadmin之后,找到wp_posts表,發(fā)現(xiàn)根本沒(méi)有分類的字段,我就納悶了半天,難道WP那么高級(jí),連分類都不用字段標(biāo)識(shí)?那前臺(tái)怎么進(jìn)行分類顯示的啊?于是就研究了起來(lái),四處翻表,四處查找。最終還是通過(guò)搜索查到了一點(diǎn)資料:WordPress直接訪問(wèn)數(shù)據(jù)庫(kù)列出指定分類目錄下的所有文章,才知道,原來(lái)WP的分類都是寫(xiě)在wp_term_relationships這個(gè)表里,通過(guò)文章ID和分類ID或tag的ID對(duì)應(yīng)來(lái)進(jìn)行分類。 知道這些,就好辦多了。通過(guò)引用文章里介紹的sql語(yǔ)句進(jìn)行查詢刪除就行了,但是因?yàn)槟瞧恼聦?xiě)的比較早,對(duì)應(yīng)的WP版本,數(shù)據(jù)庫(kù)結(jié)構(gòu)可能有所不同,需要進(jìn)行修改一下,當(dāng)然,我這里所說(shuō)的WordPress 通過(guò)SQL批量刪除指定目錄文章的方法也是針對(duì)目前的wordpress 3.3.1版本。 引用文章提供的SQL語(yǔ)句: 經(jīng)過(guò)我修改之后的語(yǔ)句(這里我要?jiǎng)h除的特定目錄ID就是26): 稍微精簡(jiǎn)的語(yǔ)句(只查詢出要查找的ID): 中間為了找到刪除的方法變形的3個(gè)語(yǔ)句(具體的思路經(jīng)過(guò)1天1夜和酒精的摧殘已經(jīng)想不起來(lái)了): 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) 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) 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) 中間因?yàn)閐elete語(yǔ)句老是報(bào)錯(cuò),于是搜了下關(guān)于mysql delete數(shù)據(jù)的語(yǔ)法:對(duì)MySQL DELETE語(yǔ)法的詳細(xì)解析,才知道自己寫(xiě)的不對(duì),哪里要那么多的select那么多的括號(hào),查那么多的表,直接delete from ... using ... where ....就行了。下面是最終的,WordPress指定特定目錄刪除下面所有文章的語(yǔ)句: delete 這就是我?jiàn)^斗到凌晨1點(diǎn)半的結(jié)果,希望后來(lái)的諸位共勉之,不要像我一樣走那么多彎路,神啊,原諒我這個(gè)不懂MySql的人吧~ 2012.03.10 update: (1)wp_posts 進(jìn)行完上面的刪除操作之后,需要對(duì)表進(jìn)行一下優(yōu)化(phpmyadmin后臺(tái)界面操作),不然還是原來(lái)好幾百M(fèi)。 (2)wp_term_relationships 也需要?jiǎng)h除對(duì)應(yīng)的文章分類關(guān)系,不然記錄條數(shù)和原來(lái)的wp_posts 一樣,好幾W條。 查詢看下是不是: 刪除: 同樣幾W條記錄消滅掉,最后記得優(yōu)化下表。 (3)最后把wp_term_taxonomy里的分類文章數(shù)量計(jì)數(shù)的幾W count 給歸零,這個(gè)可以直接通過(guò)phpmyadmin直接界面操作 免責(zé)聲明:如果你不懂上面的語(yǔ)句,或者沒(méi)有修改,直接復(fù)制執(zhí)行了,產(chǎn)生的任何后果,夜火我不承擔(dān)任何責(zé)任,因?yàn)檫@是你的失誤,執(zhí)行前一定要慎重! |
|
來(lái)自: 草莓和車?yán)遄?/a> > 《WordPress》