在不使用子查询的情况下获取没有特定定制字段的所有帖子

时间:2017-06-07 作者:rinogo

我需要获得所有没有特定自定义字段的帖子(例如。custom_field).

以下查询工作正常:

SELECT * FROM wp_posts WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = "custom_field")
如果可能的话,我会尽量避免使用子查询。How can this query be rewritten so it doesn\'t use a subquery? 我试着用一个连接来写它,但我不知道如果某个特定的meta_key 存在自定义字段。

例如,天真的尝试可能是:

SELECT p.* FROM wp_posts p JOIN wp_postmeta pm ON p.id = pm.post_id AND pm.meta_key != "custom_field"
但是,此查询只是避免在具有meta_key 匹配"custom_field". 该帖子的其他行仍将被合并。我们希望获得所有没有自定义字段的帖子meta_key 属于"custom_field".

有什么想法吗?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

WordPress就是这样做的:

SELECT wp_posts.* FROM wp_posts
LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = \'custom_field\' )
WHERE wp_postmeta.post_id IS NULL
你可以用WP_Query meta_query\'compare\' => \'NOT EXISTS\'.

结束

相关推荐

Database Query not working

我一直在关注SteveMarks的一个教程,该教程介绍了如何将帖子中的信息添加到新的Database Table 和往常一样postmeta 一然而,无论我尝试什么,它都不会将信息存储在新表中,有人能看到我的错误吗?教程可在以下位置获得:http://biostall.com/performing-a-radial-search-with-wp_query-in-wordpress 我的帖子类型是festival-event 我将自定义帖子类型的名称与函数中的名称相同,以查看是否遗漏了某些内容。这个SQL