按重复列删除条目

时间:2014-10-31 21:40:43

标签: mysql sql wordpress phpmyadmin

所以我正在处理wordpress中的一个奇怪的问题,其中我有一个插件在数据库中创建重复的条目 - 而没有意识到 - 因为wordpress通过递增post_id'帮助',使其完全忽略所有其他数据库值应该简单地覆盖。我已经修复了创建它的问题,但是我留下了一个非常过满的数据库,其中有45,000行,其中许多只是相同数据的重复。

数据库名称为wp_postmeta,其中包含meta_id,post_id,meta_key,meta_value列。我觉得我需要删除'meta_value'列的重复条目,保留任何重复值的最新'post_id'。谷歌搜索后我想出了这个查询,似乎它应该做我需要它做的事情,除了我得到下面的版本错误是代码和错误:

DELETE FROM wp_postmeta WHERE `meta_value` NOT IN (
    SELECT `meta_value` FROM wp_postmeta 
    GROUP BY `meta_value`
    ORDER BY `post_id` DESC
    LIMIT 1
);

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

现在,我理解这是说什么,但是我不太熟悉使用sql解决这个问题,使用不同的查询来获取所有重复的'meta_values'并删除那些不是最新的'meta_values' POST_ID”。有人能指出我正确的方向来寻找或帮助我找到更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这可能适合你。它应该删除除post_id最高的行之外的所有行。

DELETE oldposts.* FROM wp_postmeta oldposts
JOIN wp_postmeta newposts ON oldposts.meta_value = newposts.meta_value
   AND newposts.post_id > oldposts.post_id
相关问题