Php 使用一个SQL查询删除POSTETA和POST

Php 使用一个SQL查询删除POSTETA和POST,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我有两个SQL查询,用于从Wordpress数据库中删除帖子和元数据。我可以按顺序运行这些查询,但我想一次查询一次,完成整个工作 按元键和值删除帖子: DELETE wp_posts FROM wp_posts INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID WHERE (wp_postmeta.meta_key = 'vimport_key' AND wp_postmeta.meta_value = 'some value

我有两个SQL查询,用于从Wordpress数据库中删除帖子和元数据。我可以按顺序运行这些查询,但我想一次查询一次,完成整个工作

按元键和值删除帖子:

DELETE wp_posts FROM wp_posts
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
WHERE (wp_postmeta.meta_key = 'vimport_key' AND wp_postmeta.meta_value = 'some value');
此查询从wp_Posteta中删除与帖子不匹配的行

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

查看级联选项或执行此操作

DELETE p, pm
  FROM wp_posts p
 INNER 
  JOIN wp_postmeta pm
    ON pm.post_id = p.ID
 WHERE pm.meta_key = 'vimport_key' 
   AND pm.meta_value = 'some value';

请注意,按照惯例,我们通常以相反的方式编写,这样WHERE子句引用第一个表,但它在逻辑上(和性能上)是相同的——正如a*b与b*a相同一样。

也许可以看看cascade?感谢您的回答,它是有效的!还有最后一件事。如何更改查询,以便像在第二次查询中一样,从帖子中删除所有PosteTa。所以使用元键作为选择器,然后从这篇文章中删除所有的postETA。我不明白。这就是它的作用!?!您可能有一些遗留数据,您将需要使用现有查询(一次),但在这之后,一切都应该很好。如果我有误解,那么我建议您通过适当的DDL和/或SQLFIDLE提供一个示例。