【发布时间】:2010-12-27 16:04:35
【问题描述】:
批量删除不受欢迎的标签
我有 1000 个标签,我想简单地删除所有未使用超过 X 次的标签...即 5 次。
有没有人知道一个简单的方法来做到这一点?即使是直接的 SQL 也会完全摇滚!
【问题讨论】:
标签: wordpress tags sql-delete
批量删除不受欢迎的标签
我有 1000 个标签,我想简单地删除所有未使用超过 X 次的标签...即 5 次。
有没有人知道一个简单的方法来做到这一点?即使是直接的 SQL 也会完全摇滚!
【问题讨论】:
标签: wordpress tags sql-delete
使用 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 替换为您选择的任意数字。
【讨论】:
Jasons 的答案在我的安装中有效,分类的名称是“post_tag”而不是“tag”
【讨论】:
$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 中删除,但如果您添加另一个同名标签,则会导致数据完整性不佳和问题。