Meta_query比较运算符说明


37

我注意到在meta_query中可以使用一堆运算符进行比较。但是,我不太确定我应该使用什么运算符,就像=LIKE运算符一样令人困惑。

我想知道每个操作员的确切含义,以及在什么情况下应该使用它们。

=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS

谢谢。

Answers:


50

与您期望的一样,前几项工作:

=   equals
!=  does not equal
>   greater than
>=  greater than or equal to
<   less than
<=  less than or equal to

LIKE并且NOT LIKE是让你在野生卡符号添加,所以你可以有一个元查询SQL操作,看起来像这样:

array( 
    'key' => 'name', 
    'value' => 'Pat', 
    'compare' => 'LIKE'
)

这将返回元值“ name”具有字符串“ Pat”的所有帖子。在这种情况下,“ Pat”,“ Patricia”和“ Patrick”将全部退还给您。有一个非WordPress的教程说明在这里

%不需要添加通配符,因为默认情况下会添加通配符,如@Herb在其下面的答案中所述。像这样:$meta_value = '%' . like_escape( $meta_value ) . '%';-请参阅

INNOT IN选择在给定数组中(或不在给定数组中)的所有匹配项。因此,您可以执行以下操作:

array(
    'key'     => 'color', 
    'value'   => array('red', 'green', 'blue') 
    'compare' => 'IN'
)

它将获得所有颜色设置为红色,绿色或蓝色的帖子。使用“ NOT IN”得到相反的结果,即任何值设置为数组中值以外的值的帖子。

为此生成的SQL将如下所示:

SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue") 

BETWEENNOT BETWEEN允许您定义可能正确的值范围,并要求您在meta_query的数组中提供两个值:

array( 
    'key' => 'price', 
    'value' => array(20,30) 
    'compare' => 'BETWEEN'
)

这将为您提供价格在20到30之间的所有帖子。此人深入研究一个带有日期的示例。

NOT EXISTS就像听起来一样-未设置meta值或将其设置为null值。该查询所需的全部就是键和比较运算符:

array( 
    'key' => 'price', 
    'compare' => 'NOT EXISTS'
)

这个人需要查询不存在的元值,并需要它们与他人一起玩。

希望这可以帮助!


注意:如果您使用的是meta_query数组,则键的前缀不应为meta_。如果您使用$query->meta_key$query->meta_value等,则这些仍应保留前缀。
肖恩

我似乎找不到“ IN”比较选项的解释。任何想法如何工作?
2015年

1
@Joe,我不知道为什么我没有添加有关“ IN”和“ NOT IN”的任何内容。我已经用这些比较来编辑和更新了答案。
2015年

7

请注意,当使用meta_compare值'LIKE'时,WordPress会自动在meta_value字符串周围包装通配符(%)。因此,“ Pat%”示例可能无法返回任何结果。


在Herb的文档中是否有关于此的信息?该示例是否应该更改以删除%

我实际上应该立即执行此操作,请参阅源代码,然后很清楚Herb是正确的。@guiniveretoo
Nicolai
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.