Meta_query comparar explicação do operador


37

Notei que existem muitos operadores que podem ser usados ​​para comparar na meta_query. No entanto, não tenho certeza de qual operador devo usar, é de alguma forma confuso como =e LIKEoperador.

Gostaria de saber exatamente o que cada operador significa e em que condições devo usá-los.

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

Obrigado.

Respostas:


50

Os primeiros trabalhos funcionam como você esperaria:

=   equals
!=  does not equal
>   greater than
>=  greater than or equal to
<   less than
<=  less than or equal to

LIKEe NOT LIKEsão operadores SQL que permitem adicionar símbolos curinga, para que você possa ter uma meta consulta semelhante a esta:

array( 
    'key' => 'name', 
    'value' => 'Pat', 
    'compare' => 'LIKE'
)

Isso retornaria todas as postagens em que o meta-valor "name" possui a string "Pat". Nesse caso, "Pat" "Patricia" e "Patrick" seriam todos devolvidos a você. Há uma explicação tutorial não-WordPress aqui .

%Não é necessário adicionar o caractere curinga , porque ele é adicionado por padrão, como @Herb disse em sua resposta abaixo . Assim: $meta_value = '%' . like_escape( $meta_value ) . '%';- veja a fonte .

INe NOT INselecione quaisquer correspondências que estejam (ou não) na matriz especificada. Então você poderia fazer algo assim:

array(
    'key'     => 'color', 
    'value'   => array('red', 'green', 'blue') 
    'compare' => 'IN'
)

e obteria todas as postagens com a cor definida em vermelho, verde ou azul. O uso de 'NOT IN' é inverso, qualquer postagem que tenha um valor definido como qualquer outra coisa além do que está na matriz.

O SQL gerado para isso seria algo parecido com isto:

SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue") 

BETWEENe NOT BETWEENpermita que você defina um intervalo de valores que possa estar correto e exija dois valores em uma matriz em sua meta_query:

array( 
    'key' => 'price', 
    'value' => array(20,30) 
    'compare' => 'BETWEEN'
)

Isso fornecerá a você todas as postagens em que o preço está entre 20 e 30. Essa pessoa procura um exemplo com datas.

NOT EXISTSé exatamente o que parece - o valor meta não está definido ou está definido como um valor nulo. Tudo o que você precisa para essa consulta é o operador de chave e comparação:

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

Essa pessoa precisava consultar meta-valores inexistentes e precisava que eles se dessem bem com os outros.

Espero que isto ajude!


Nota: Se você estiver usando meta_queryarray, suas chaves não deverão ser prefixadas meta_. Se você estiver usando $query->meta_key, $query->meta_valueetc., eles ainda devem manter o prefixo.
21314 Sean

Não consigo encontrar uma explicação sobre o que a opção de comparação "IN" faz. Alguma idéia de como isso funciona?
Joe

1
@ Joe, não sei por que não adicionei nada sobre "IN" e "NOT IN". Editei e atualizei a resposta com essas comparações.
219 Jen

7

Observe que, ao usar o valor meta_compare de 'LIKE', o WordPress agrupa automaticamente o caractere curinga (%) em torno da string meta_value. Portanto, o exemplo 'Pat%' pode falhar em retornar resultados.


há informações sobre isso nos documentos em algum lugar Herb? O exemplo deve mudar para remover o %?
21413 Jen

Deveria, eu realmente fiz isso agora, ver a fonte , então fica muito claro que Herb está certo. @guiniveretoo
Nicolai
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.