Meta_Query comparar explicação do operador
2 respostas
- votos
-
- 2012-10-29
Oprimeirotrabalho como vocêesperaria:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
.como e não como
LIKE
eNOT LIKE
são operadores SQL quepermitem adicionar símbolos de cartões selvagens,para que vocêpossater umameta consulta que separece comesta:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
Isso retornariatodas aspostagensem que o "nome" valormetatem a string "Pat". Neste caso,"Pat" "Patricia"e "Patrick" seriamtodos retornados de voltapara você. Há umtutorialnão wordpress Explicação aqui .
Adicionando o caractere curinga
%
não énecessário,porque é adicionadoporpadrão como @Herb disseno seu abaixo Resposta . Assim:$meta_value = '%' . like_escape( $meta_value ) . '%';
- consulte fonte .
.em e nãoem
IN
eNOT IN
selecione qualquer correspondência queestejam (ounão)namatriz dada. Então vocêpoderiafazer algo assim:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
e obterátodas aspostagens quetêm a cor definidapara vermelho,verde ou azul. Usando 'nãoem' recebe oinverso,quaisquerposts quetêm um valor definidopara qualquer outra coisa do queno array.
O SQLgeradoparaisso seria algo assim:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
.entre e nãoentre
BETWEEN
eNOT BETWEEN
permite definir umintervalo de valores quepodemestar corretos,e exigir que você dê dois valoresem umamatrizem suameta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
Issoirá obtertodos osposts onde opreço éentre 20e 30. Essapessoa Digsem umexemplo com datas.
.nãoexiste
NOT EXISTS
é como o queparece - o valor dometanãoestá definido ou é definido como um valornulo. Tudo que vocêprecisaparaessa consulta é o operador chavee comparação:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
Estapessoa necessáriapara consultarnão valores demetaexistentes,e precisávamos delesparajogarbem com os outros.
Espero queisso ajude!
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!
-
Nota: Se vocêestiver usando o Meta_Query` Array,suas chavesnão devem serprefixadas com `meta_`.Se vocêestiver usando `$ query->meta_key`,` $ query->meta_value`,etc.entãoestes devem aindamanter oprefixo.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
-
Eunão consigoencontrar umaexplicação sobre o que a opção "in" comparar.Algumaideia de comoissofunciona?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,eunão seiporqueeunão adicioneinada sobre "em"e "nãoem".Euediteie atualizei a resposta comessas comparações.@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
-
Esta é uma ótima resposta,mas hámais algumas opções disponíveis agora-: 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
-
'Existe','regexp','não regexp'e 'rlike''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
Observe que ao usar um valor META_COMPARE de 'Like',o WordPressenvolve automaticamente o caractere curinga (%) ao redor da string Meta_Value.Portanto,oexemplo "Pat%"podenão conseguir retornar quaisquer resultados.
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.
-
Existeinformação sobreissonos documentosem algum lugarerva?Oexemplomudarpara remover o `%`?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
Deve,eu realmentefizisso agora,veja a [fonte] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-Includes/meta.php#l841),entãoficamuito claro que aervaestá certa.@guiniveretoo.It 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
Eunotei que há ummonte de operadorpode ser usadopara compararem meta_query. Noentanto,nãotenho certeza de que operador devo usar,é de algumaforma confuso como
=
eLIKE
operador.Eugostaria de saber o queexatamente cada operador significa,e em que condiçãoeu deveria usá-los.
Obrigado.