Объяснение оператора сравнения Meta_query

37

Я заметил, что есть несколько операторов, которые можно использовать для сравнения в meta_query. Тем не менее, я не совсем уверен, какой оператор я должен использовать, это как-то сбивает с толку, как =и LIKEоператор.

Я хотел бы знать, что конкретно означает каждый оператор, и в каких условиях я должен их использовать.

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

Спасибо.

DEV-джим
источник

Ответы:

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". В этом случае «Пэт», «Патриция» и «Патрик» все будут возвращены вам. Там это не-WordPress учебник объяснение здесь .

Добавлять подстановочный знак %не нужно, потому что он добавляется по умолчанию, как сказал @Herb в своем ответе ниже . Как это: $meta_value = '%' . like_escape( $meta_value ) . '%';- см. Источник .

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'
)

Этому человеку нужно было запрашивать несуществующие мета-значения, и им нужно было хорошо играть с другими.

Надеюсь это поможет!

Джен
источник
Примечание: если вы используете meta_queryмассив, ваши ключи не должны иметь префикс meta_. Если вы используете $query->meta_key, $query->meta_valueи т. Д., То они все равно должны сохранять префикс.
Шон
Я не могу найти объяснение того, что делает опция сравнения "IN". Есть идеи, как это работает?
Джо
1
@ Джо, я не знаю, почему я не добавил ничего о «IN» и «NOT IN». Я отредактировал и обновил ответ с этими сравнениями.
Джен
7

Обратите внимание, что при использовании значения meta_compare «LIKE» WordPress автоматически переносит подстановочный знак (%) вокруг строки meta_value. Таким образом, пример 'Pat%' может не дать никаких результатов.

bobbingwide
источник
есть ли информация об этом в документации где-нибудь Херб? Если пример изменить, чтобы удалить %?
Джен
Должно быть, я на самом деле сделал это прямо сейчас, посмотрите источник , тогда станет ясно, что Херб прав. @guiniveretoo
Николай