问题描述
我注意到有一堆操作可以用于比较 meta_query 。但是,我不太清楚我应该使用什么操作系统,像=
和 LIKE
操作符一样令人困惑。
我想知道每个操作者的意思是什么,在什么情况下我应该使用它们。
=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS
谢谢。
最佳解决方案
最初的几件工作就像你所期望的那样:
= equals
!= does not equal
> greater than
>= greater than or equal to
< less than
<= less than or equal to
LIKE
和 NOT LIKE
是允许您添加 wild-card 符号的 SQL 运算符,因此您可以使用如下所示的元查询:
array(
'key' => 'name',
'value' => 'Pat',
'compare' => 'LIKE'
)
这将返回元值”name” 具有字符串”Pat” 的所有帖子。在这种情况下,”Pat” “Patricia” 和”Patrick” 都将返回给您。有一个 non-WordPress 教程说明 here 。
添加通配符%
是没有必要的,因为默认情况下它被添加为 @Herb 在他的下面的 answer 中说。像这样:$meta_value = '%' . like_escape( $meta_value ) . '%';
– 见 source 。
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 之间。 This person 挖掘一个例子与日期。
NOT EXISTS
就像听起来一样 – 元值不设置或设置为空值。所有您需要的查询是关键和比较运算符:
array(
'key' => 'price',
'compare' => 'NOT EXISTS'
)
This person 需要查询 non-existant 元值,并需要与其他人一起玩。
希望这可以帮助!
次佳解决方案
请注意,当使用’LIKE’ 的 meta_compare 值时,WordPress 会自动将通配符 (%) 包装在 meta_value 字符串周围。因此,’Pat%’ 示例可能无法返回任何结果。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。