我注意到在meta_query中可以使用一堆运算符进行比较。
但是,我不确定我应该使用哪种运算符,这有点令人困惑,例如=LIKE运算符。

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

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


谢谢。

#1 楼

您可能期望的前几个工作:

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





喜欢和不喜欢

LIKENOT LIKE是允许您添加通配符的SQL运算符,因此您可以使用如下所示的元查询:

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


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

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



IN和NOT IN
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听起来很像-未设置元值或将其设置为空值。该查询所需的全部是键和比较运算符:

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


该人员需要查询不存在的元值,并且需要它们与他人一起玩耍。

希望有帮助!

评论


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

– Sean
2014年8月20日下午14:25

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

–乔
2015年3月9日14:50

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

–仁
15年3月9日在16:05

这是一个很好的答案,但是现在有更多可用选项:codex.wordpress.org/Class_Reference/WP_Meta_Query

– noelmcg
20'八月28'在10:38



'EXISTS','REGEXP','NOT REGEXP'和'RLIKE'

– noelmcg
20年8月28日在10:39

#2 楼

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

评论


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

–仁
13年11月22日在15:47

我现在应该确实这样做了,请参阅源代码,然后很清楚地知道Herb是正确的。 @guiniveretoo

–尼古拉
2014年4月8日15:10