2012-12-27 31 views
1

導入錯誤後,我的帖子中有很多重複內容。Mysql刪除類似帖子:無法在FROM子句中指定目標表'wp_posts'進行更新

然後,我嘗試與查詢刪除這個帖子:

DELETE 
FROM wp_posts USING wp_posts 
LEFT JOIN wp_postmeta pm ON wp_posts.ID = pm.post_id 
AND pm.meta_key="_wpbdp[fields][6]" 
LEFT JOIN wp_wpbdp_listing_fees wlf ON wp_posts.ID = wlf.listing_id 
WHERE wp_posts.post_type="wpbdp_listing" 
AND wp_posts.post_status="publish" 
AND EXISTS (
    SELECT NULL 
    FROM wp_posts p2 
    LEFT JOIN wp_postmeta pm2 ON p2.ID = pm2.post_id 
    AND pm2.meta_key="_wpbdp[fields][6]" 
    LEFT JOIN wp_wpbdp_listing_fees wlf2 ON p2.ID = wlf2.listing_id 
    WHERE p2.post_type="wpbdp_listing" 
    AND pm2.meta_value=pm.meta_value 
    AND p2.post_status="publish" 
    AND wlf2.category_id=wlf.category_id 
) 

不幸的是,我不能做一個SELECT聲明誰調用我想刪除同一表。 還有其他解決方案嗎?

+0

你有某種身份證或什麼東西?如果是這樣,請選擇獲取重複ID,將其存儲在數組中,然後再次嘗試刪除ID。或者:你如何確定一行是「重複的」?然後,'UNIQUE'鍵可以很好地解決您的問題。 – ATaylor

+1

你可以在那裏閱讀http://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql – Nick

+0

我想你需要寫一個腳本並運行幾個查詢來清理你的數據庫。 – m4t1t0

回答

1

我嘗試了一些新的東西,並通過了。 繼@尼克的想法,我做了查詢:

DELETE p 
FROM wp_posts p, wp_posts p2 
WHERE p.post_title = p2.post_title 
AND p.post_type="wpbdp_listing" 
AND p2.post_type="wpbdp_listing" 
AND p2.post_status="publish" 
AND p.post_status="publish" 
AND EXISTS(
    SELECT NULL 
    FROM wp_wpbdp_listing_fees wlf 
    WHERE p.ID = wlf.listing_id 
    AND EXISTS (
     SELECT NULL 
     FROM wp_wpbdp_listing_fees wlf2 
     WHERE wlf2.category_id = wlf.category_id 
     AND p.ID = wlf2.listing_id 
    ) 
) 
AND EXISTS(
    SELECT NULL 
    FROM wp_postmeta pm 
    WHERE p.ID = pm.post_id 
    AND pm.meta_key="_wpbdp[fields][6]" 
    AND EXISTS (
     SELECT NULL 
     FROM wp_postmeta pm2 
     WHERE pm2.meta_key="_wpbdp[fields][6]" 
     AND p.ID = pm2.post_id 
     AND pm2.meta_value=pm.meta_value 
    ) 
) 
AND p.ID < p2.ID 

這是非常醜陋的,而不是優化的,但它的作品!

順便說一句,謝謝你的回答!

相關問題