但是,我不确定我应该使用哪种运算符,这有点令人困惑,例如
=
和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
喜欢和不喜欢
LIKE
和NOT LIKE
是允许您添加通配符的SQL运算符,因此您可以使用如下所示的元查询:array(
'key' => 'name',
'value' => 'Pat',
'compare' => 'LIKE'
)
这将返回所有帖子其中元值“名称”具有字符串“ Pat”。在这种情况下,“ Pat”,“ Patricia”和“ Patrick”将全部退还给您。这里没有非WordPress教程的说明。
不需要添加通配符
%
,因为默认情况下会添加通配符,如@Herb在他的以下回答中所述。像这样:$meta_value = '%' . like_escape( $meta_value ) . '%';
-参见源。 IN和NOT IN
IN
和NOT IN
选择在给定数组中(或不在给定数组中)的任何匹配项。因此,您可以执行以下操作:array(
'key' => 'color',
'value' => array('red', 'green', 'blue')
'compare' => 'IN'
)
,它将获得所有颜色设置为红色,绿色或蓝色的帖子。使用'NOT IN'可以得到相反的结果,任何将值设置为数组中值以外的值的帖子。
为此生成的SQL如下所示:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
之间彼此之间
/>
BETWEEN
和NOT BETWEEN
允许您定义一个可能正确的值范围,并要求您在meta_query中的数组中提供两个值:array(
'key' => 'price',
'value' => array(20,30)
'compare' => 'BETWEEN'
)
此将为您提供价格在20到30之间的所有帖子。此人仔细研究一个带有日期的示例。
不存在
NOT EXISTS
听起来很像-未设置元值或将其设置为空值。该查询所需的全部是键和比较运算符:array(
'key' => 'price',
'compare' => 'NOT EXISTS'
)
该人员需要查询不存在的元值,并且需要它们与他人一起玩耍。
希望有帮助!
#2 楼
请注意,当使用meta_compare值'LIKE'时,WordPress会自动在meta_value字符串周围包装通配符(%)。因此,“ Pat%”示例可能无法返回任何结果。评论
在Herb的文档中是否有关于此的信息?该示例是否应该更改以删除%?
–仁
13年11月22日在15:47
我现在应该确实这样做了,请参阅源代码,然后很清楚地知道Herb是正确的。 @guiniveretoo
–尼古拉
2014年4月8日15:10
评论
注意:如果使用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