问题描述

我注意到有一堆操作可以用于比较 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

 LIKENOT 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

 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 之间。 This person 挖掘一个例子与日期。

 NOT EXISTS 就像听起来一样 – 元值不设置或设置为空值。所有您需要的查询是关键和比较运算符:

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

 This person 需要查询 non-existant 元值,并需要与其他人一起玩。

希望这可以帮助!

次佳解决方案

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。