meta_key
的帖子,然后创建它。由于我正在测试的查询似乎无法正常工作,我在查找这些帖子时遇到了问题。
这是我用来尝试获得这些帖子的代码:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
如果没有带钥匙的帖子,则此操作不返回任何内容
colors
,但是只要存在该键(与我所需要的相反),就会用键ids
返回它们的帖子colors
。我尝试使用EXIST
代替,但是没有运气。如果有人可以向我提示创建类似我所需要的查询的正确方法,我将不胜感激。
谢谢!
#1 楼
我对此进行了更多测试,坦白地说,找不到它不能工作的原因(除非上面的代码只是一个片段,并且真实的代码适合下面的示例)。但是,我确实发现了一些可能会引导您朝正确方向发展的事物。1)就其本身而言,此元查询等效于“ colors IS NULL”,即它将返回postmeta表中未设置该键的帖子。
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // this should work...
),
)
2)在WordPress 3.9之前,建立到'OR'的'relation'索引会改变这一点健康)状况。它返回相反的结果。不要问我为什么。在执行多个元查询时,这一点尤其重要。这意味着最初不可能对“颜色”键设置为“蓝色”(或其他设置)或根本没有设置的帖子进行查询。下面的查询将忽略第一个条件,仅返回与第二个条件匹配的条件。
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // doesn't work
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
3)但是,如果我们可以欺骗WordPress使用第一个条件设置“值”。它不需要相关的值(据我所知,它被忽略了),但是需要对其进行设置才能使
NOT EXISTS
条件起作用。'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS', // works!
'value' => '' // This is ignored, but is necessary...
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
直到WordPress 3.9为止都是如此。如果您仍在使用旧版本,这是一个可行的解决方法。
评论
谢谢!很抱歉造成您的延迟。我最终使用了一个查询,但接下来的几个小时我将测试您的解决方案,以便我可以切换回去,如果可以的话,我们可以提供其他帮助。我会尽快通知您。再次感谢
–乔丹·贝尔
2013年1月17日在1:49
写得很好,并确认添加空值将返回预期结果。我想说这是无意的,值得在trac.wordpress.org上看看是否已经有一张票,如果没有,这是可复制的。
–泰勒·杜威
2013年3月6日19:22
感谢您对WP技巧的出色解释和解决方案:)确实花了一些时间才能到达这里-但现在我要单击upvote至少10次(如果可以的话)。
– lor猴
13年3月21日在14:18
如果我使用compare EXISTS,不幸的是,在新版本的WP中未忽略值(在4.2.2中进行了测试)
–伊戈尔·耶罗西米奇(IgorJerosimić)
15年7月1日在10:08
WP 3.9中修复了需要您指定值的EXISTS和NOT EXISTS“错误”
–trex005
16年4月15日在7:42
#2 楼
使用自定义查询对我有用:SELECT * FROM wp_posts as posts
WHERE posts.post_type = 'post'
AND NOT EXISTS (
SELECT * FROM `wp_postmeta`
WHERE `wp_postmeta`.`meta_key` = "your_meta_key"
AND `wp_postmeta`.`post_id`=posts.ID
)
#3 楼
这对我有用。'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // doesn't work
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
评论
您正在使用什么版本的WordPress?嗨,抱歉。我正在使用v3.5
好像在3.5中添加了该类型的查询(compare设置为NOT EXISTS),所以据我所知它应该可以正常工作。不过,通过自定义SELECT查询可以轻松做到这一点...
谢谢,我会尝试使用选择。我必须了解要查询哪些表以及如何使查询符合:(
很奇怪。我找不到该代码的问题,而您使用的是3.5+,这就是我问的原因。您是否真的查看过数据库以确认是否按照您认为的方式插入了数据?