Массовое удаление непопулярных тегов
У меня есть 1000 тегов, и я хотел бы просто удалить все теги, которые не используются более X раз... т.е. 5 раз.
Кто-нибудь знает простой способ сделать это? Даже чистый SQL будет просто КАЧАТЬ!
Массовое удаление непопулярных тегов
У меня есть 1000 тегов, и я хотел бы просто удалить все теги, которые не используются более X раз... т.е. 5 раз.
Кто-нибудь знает простой способ сделать это? Даже чистый SQL будет просто КАЧАТЬ!
$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);
}
}
Есть более эффективные способы сделать это, но это сделает работу.
Изменить: сначала сделайте резервную копию. Я не совсем уверен, что эта таблица предназначена исключительно для тегов.
wp_terms
, но у вас будет плохая целостность данных и проблемы, если вы добавите еще один тег с тем же именем.
- person Jason McCreary; 29.12.2010
Лучше всего использовать команду SQL. Таблицы wp_terms
, wp_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;
Примечание. Я настоятельно рекомендую сделать резервную копию этих таблиц перед выполнением приведенных выше команд.
Обязательно сначала сделайте резервную копию базы данных
DELETE a,c FROM wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b on b.term_taxonomy_id = c.term_taxonomy_id
WHERE ( c.taxonomy = 'post_tag' AND c.count <= 5 );
В последней строке вы также можете изменить c.count <= 5
и заменить 5 на любое число по вашему выбору.
Ответ Джейсона сработал, за исключением того, что в моей установке имя таксономии было «post_tag», а не «tag».