首页 > 解决方案 > SQL查询从wordpress数据库中删除重复的postmeta

问题描述

我的 Wordpress wp_postmeta 表上有一些重复的行。实际上有数百个旧的 postmeta 数据被列出 2 或 3 次的情况......可能来自过去完成的一些数据导入过程......所以我需要从 wp_postmeta 表中删除不需要的重复行,只留下那些 meta_id 编号较高的行...举例说明 wp_postmeta 表的样子:

meta_id |   post_id   |  meta_key   |   meta_value
155153  |   177115    |  owner_img  |   https://www.example.com/a.jpg
176231  |   177115    |  owner_img  |   https://www.example.com/a.jpg
193983  |   177115    |  owner_img  |   https://www.example.com/a.jpg

请注意,这些是 wp_post 表上同一帖子的 3 个元数据(因为它具有相同的 post_id)...所以我只需要保留最新的元数据行,并删除所有其他元数据为每个元键重复的实例...我怎样才能做到这一点?

DELETE wp_postmeta.*
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_postmeta.post_ID = wp_posts.ID 

标签: mysqlsqlwordpress

解决方案


经过大量研究,我能够弄清楚,以防万一有人在寻找答案...

DELETE t1 FROM wp_postmeta t1 
INNER JOIN wp_postmeta t2  
WHERE  t1.meta_id < t2.meta_id 
AND  t1.meta_key = t2.meta_key 
AND t1.post_id=t2.post_id;

推荐阅读