Deleting Post Revisions: do NOT use the a,b,c JOIN code you see everywhere
-
Post revisions bother some people, especially on larger sites because they add lots of rows to
wp_posts
. A common bit of MySQL code posted in these forums, plugins and elsewhere goes like this:### do not use: ### # DELETE a,b,c # FROM wp_posts a # LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) # LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) # WHERE a.post_type = 'revision';
The problem here is that
wp_term_relationships
is used for both posts and links, two different tables. Sometimes theobject_id
refers towp_links.link_id
, notwp_posts.ID
. Andobject_id
‘s are not unique inwp_term_relationships
. So there is a chance, especially with lower-numberedwp_post.ID
‘s, that you will delete a relationship needed to make Dashboard / Links work. The DELETE will remove two rows that matchobject_id
, one for a post and one for a link.One plugin with this bug is
https://www.ads-software.com/plugins/better-delete-revision/Another plugin just deletes revisions and does not clean up meta and terms at all, which is not ideal:
https://www.ads-software.com/plugins/delete-revision/These plugins try to do things the right way, by using WP’s own term functions:
https://www.ads-software.com/plugins/rvg-optimize-database/
https://www.ads-software.com/plugins/revision-control/Here is a proposal to put a revision deletion function in WP core:
https://www.ads-software.com/ideas/topic/native-function-to-delete-post-revisions
- The topic ‘Deleting Post Revisions: do NOT use the a,b,c JOIN code you see everywhere’ is closed to new replies.