Описание оператора сравнения Meta_query
2 ответ
- голосов
-
- 2012-10-29
Первые несколько работают,как и следовало ожидать:
= 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». В этом случае все «Пэт»,«Патриция» и «Патрик» будут возвращены вам обратно. здесь .
Добавлять подстановочный знак
%
не обязательно,потому что он добавляется по умолчанию,как сказал @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' )
Этому человеку нужно было запросить не- существующие мета-значения и нуждаются в них,чтобы хорошо ладить с другими.
Надеюсь,это поможет!
The first several work as you would expect:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE and NOT LIKE
LIKE
andNOT LIKE
are SQL operators that let you add in wild-card symbols, so you could have a meta query that looks like this:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
This would return all posts where the meta value "name" has the string "Pat". In this case, "Pat" "Patricia" and "Patrick" would all be returned back to you. There's a non-WordPress tutorial explanation here.
Adding the wildcard character
%
isn't necessary, because it gets added by default like @Herb said in his below answer. Like this:$meta_value = '%' . like_escape( $meta_value ) . '%';
- see source.
IN and NOT IN
IN
andNOT IN
select any matches that are in (or not in) the given array. So you could do something like this:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
and it would get all posts that have the color set to either red, green, or blue. Using 'NOT IN' gets the reverse, any posts that have a value set to anything else than what's in the array.
The generated SQL for this would look something like this:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN and NOT BETWEEN
BETWEEN
andNOT BETWEEN
allow you to define a range of values that could be correct, and require you to give two values in an array in your meta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
This will get you all posts where the price is between 20 and 30. This person digs into an example with dates.
NOT EXISTS
NOT EXISTS
is just like what it sounds - the meta value isn't set or is set to a null value. All you need for that query is the key and comparison operator:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
This person needed to query non-existent meta values, and needed them to play nice with others.
Hope this helps!
-
Примечание: если вы используете массив `meta_query`,ваши ключи не должны начинаться с префикса`meta_`.Если вы используете `$ query->meta_key`,` $ query->meta_value` и т. Д.,Тогда они все равно должны сохранять префикс.Note: If you're using `meta_query` array, your keys should not be prefixed with `meta_`. If you're using `$query->meta_key`, `$query->meta_value`, etc. then these should still retain the prefix.
- 1
- 2014-08-20
- Sean
-
Кажется,я не могу найти объяснения того,что делает опция сравнения "IN".Есть идеи,как это работает?I can't seem to find an explanation on what the "IN" compare option does. Any idea how that works?
- 0
- 2015-03-09
- Joe
-
@Joe,я не знаю,почему я ничего не добавил про "IN" и "NOT IN".Я отредактировал и обновил ответ с этими сравнениями.@Joe, I don't know why I didn't add anything about "IN" and "NOT IN". I've edited and updated the answer with those comparisons.
- 2
- 2015-03-09
- Jen
-
Это отличный ответ,но сейчас доступно еще несколько вариантов: https://codex.wordpress.org/Class_Reference/WP_Meta_QueryThis is a great answer but there are some more options available now-: https://codex.wordpress.org/Class_Reference/WP_Meta_Query
- 0
- 2020-08-28
- noelmcg
-
EXISTS,REGEXP,NOT REGEXP и RLIKE'EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
Обратите внимание,что при использовании значенияmeta_compare «LIKE» WordPress автоматически переносит подстановочный знак (%) вокруг строкиmeta_value.Таким образом,пример «Pat%» может не вернуть никаких результатов.
Note that when using a meta_compare value of 'LIKE', WordPress automatically wraps the wildcard character ( % ) around the meta_value string. So the 'Pat%' example could fail to return any results.
-
есть информация об этом в документах где-то Herb?Следует ли изменить пример для удаления символа `%`?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
Должно быть,я действительно сделал это прямо сейчас,см. [Источник] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841),затемстановится очень ясно,что Херб прав.@guiniveretooIt should, I actually did that right now, see the [source](https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841), then it gets very clear that Herb is right. @guiniveretoo
- 0
- 2014-04-08
- Nicolai
Я заметил,что есть несколько операторов,которые можно использовать для сравнения вmeta_query. Однако я не совсем уверен,какой оператор мне следует использовать,это как-то сбивает с толку,например,оператор
=
иLIKE
.Я хотел бы знать,что именно означает каждый оператор и в каком состоянии я должен их использовать.
Спасибо.