【问题标题】:removing entries by duplicate column按重复列删除条目
【发布时间】:2014-12-28 07:28:57
【问题描述】:

所以我正在处理 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 的工作还不够熟悉,无法通过一个不同的查询来解决这个问题,该查询基本上会抓取所有重复的“元值”并删除那些不是最新的“ post_id'。谁能指出我正确的方向来寻找或帮助我找到更好的解决方案?

【问题讨论】:

    标签: mysql sql wordpress phpmyadmin


    【解决方案1】:

    这可能对你有用。它应该删除除具有最高 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2021-01-22
      • 2018-03-05
      • 2018-10-16
      • 2010-12-17
      相关资源
      最近更新 更多