2010-12-27 7 views
1

ミサを削除し、私は、タグ1000年代を持っていると私は単純にX回以上使用されていないすべてのタグ...つまり5回を削除したいと思います。質量は不人気タグ <p></p>を削除不人気タグ

これを行う簡単な方法を知っている人はいますか?まっすぐなSQLでもまったくロック!

答えて

-1
$x = 5; // set this to any number 
$sql = "SELECT `name` FROM `wp_terms`"; 
$result = mysql_query($sql); 
$count = array(); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $count[$name]++; 
} 
foreach($count as $key = $value) 
{ 
    if($value < $x) 
    { 
     $sql2 = "DELETE FROM `wp_terms` WHERE `name` = '". $key ."'"; 
     $result2 = mysql_query($sql2); 
    } 
} 

これを行うにはより効率的な方法がありますが、これは機能します。

編集:まずバックアップを作成してください。私は、その表がタグに排他的であることは完全にはわかりません。

+0

アメージング、超高速応答のおかげでたくさんのだった...私は今、それらを試してみますよ。ありがとうございます。 –

+0

私は、Jason McCrearyの例を使用してコードを変更したいと思うでしょう(または単にクエリを実行して何が起こるかを見てください)。 1つのデータベースからではなく、3つのレイヤーで行を削除する必要があるようです。 – Citizen

+0

あなたは 'wp_terms'だけから削除することができますが、同じ名前の別のタグを追加した場合、データの整合性と問題が貧弱になります。 –

2

SQLコマンドを使用するのが最善の方法です。テーブルwp_termswp_term_relationships、およびwp_term_taxonomyは興味深いものです。 WordPressはwp_term_taxonomy.countとの関係を追跡します。だから、これは人生を楽にします。

-- remove terms 
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE taxonomy = 'tag' AND count <= 5;) 
-- remove all relationships 
DELETE FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy = 'tag' AND count <= 5;) 
-- remove taxonomy entry 
DELETE FROM wp_term_taxonomy WHERE taxonomy = 'tag' AND count <= 5; 

注:私は強く、上記のコマンドを実行する前に、これらのテーブルのバックアップを作成することをお勧め。

+0

Jason、これはWP 3.1.3でも動作しますか? @Riccardo。 – Riccardo

+0

。私は3.1.3のスキーマの変更を認識していません。いずれにしても私の**ノート**に注意してください。 :) –

+0

はい、バックアップを実行してクリーンアップを開始しました。 38,000のタグが一掃されました!どうもありがとう! @ Riccardo。 – Riccardo

0

Jasons答えは私のインストール以外で働いていた、タクソノミーの名前は「post_tag」ではない「タグ」

+0

別の答えを提供するのではなく、答えとアップヴォートについてコメントするのがベストプラクティスです。 –

関連する問題