2014-10-31 178 views
0

所以我在處理wordpress中的一個奇怪的問題,其中我有一個插件在數據庫中創建重複的條目 - 並沒有意識到 - 因爲wordpress通過增加post_id來「幫助」,使其能夠完全忽略了它應該簡單覆蓋的所有其他數據庫值。我已經解決了創建這個問題的問題,但我留下了一個超過45,000行的過度填充的數據庫,其中許多數據只是相同數據的重複數據。刪除重複列的條目

數據庫名稱爲wp_postmeta,其中包含meta_id,post_id,meta_key,meta_value列。我覺得我需要刪除'meta_value'列的重複條目,並保留最新的'post_id'的任何重複值。我想出了這個查詢google搜索了一下之後,它似乎像它應該做什麼,我需要,除了我得到以下的版本錯誤代碼和錯誤它做的事:

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'並刪除那些不是最近'post_id'的查詢。任何人都可以通過正確的方向指引我尋找更好的解決方案嗎?

回答

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