2017-08-30 47 views
0

我有兩個數據庫表。一張表來自WordPress(wp_post),其中包含我的WordPress網站的所有帖子。第二個表僅用於應用程序邏輯,並存儲使用我的插件創建的帖子中的ID。SQL使用子查詢刪除大量條目

因此,在我的應用程序邏輯表中有大約70,000個ID,我想使用單個SQL語句刪除所有帖子。這是我試過的語句:

DELETE FROM wp_posts WHERE ID in (SELECT post_id FROM wp_my_table WHERE post_id IS NOT NULL AND post_id > 0);

提交查詢ALL的ID刪除,但我的MySQL服務器響應的語句採用的時間太多量,並取消該語句的執行。是否有不同的方式來獲得所有的ID和刪除所有帖子?

我知道有一些WordPress的功能,如wp_delete_post等 - 但是當刪除這些數量的帖子,它真的很慢。

+0

可以在選擇的末尾添加「LIMIT 1000」,然後重複該操作並增加限制大小,直到完成全部或命中時間錯誤。 – Tigger

回答

2

你可以嘗試刪除聯接:

DELETE t1 
FROM wp_posts t1 
INNER JOIN wp_my_table t2 
    ON t1.ID = t2.post_id 
WHERE 
    t2.post_id > 0 

你不應該需要對post_idNULL檢查中wp_my_table表作爲連接應該過濾掉這些記錄。

+0

謝謝你!奇蹟般有效。 – beeef