Meta_query comparar explicação do operador

33

Eu notei que existem vários operadores que podem ser usados para comparar em meta_query. No entanto, não tenho certeza de qual operador devo usar, de alguma forma, é confuso como = e LIKE operator.

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

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

Obrigado.

    
por dev-jim 29.10.2012 / 18:47

2 respostas

46

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

LIKE e NOT LIKE são operadores SQL que permitem adicionar símbolos de curingas, para que você possa ter uma consulta meta semelhante a esta:

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

Isso retornaria todas as postagens em que o meta-valor "name" tem a string "Pat". Neste caso, "Pat" "Patricia" e "Patrick" serão devolvidos para você. Há uma explicação do tutorial que não é do WordPress aqui .

Adicionar o caractere curinga % não é necessário, porque ele é adicionado por padrão, como @Herb disse em seu abaixo. responder . Assim: $meta_value = '%' . like_escape( $meta_value ) . '%'; - consulte fonte .

IN e NOT IN selecionam as correspondências que estão dentro ou não na matriz especificada. Então você poderia fazer algo assim:

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

e receberia todas as postagens com a cor definida como vermelho, verde ou azul. Usar 'NOT IN' recebe o contrário, quaisquer postagens que tenham um valor definido para qualquer outra coisa além do que está na matriz.

O SQL gerado para isso seria algo como isto:

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

BETWEEN e NOT BETWEEN permitem definir um intervalo de valores que podem estar corretos e exigem que você forneça dois valores em uma matriz em seu meta_query:

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

Isso vai te dar todos os posts onde o preço está entre 20 e 30. Esta pessoa procura um exemplo com datas.

NOT EXISTS é exatamente o que parece - o meta valor 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'
)

Esta pessoa precisava consultar valores meta inexistentes e precisava deles para brincar bem com os outros.

Espero que isso ajude!

    
por guiniveretoo 29.10.2012 / 19:48
7

Observe que ao usar um valor meta_compare de 'LIKE', o WordPress encapsula automaticamente o caractere curinga (%) ao redor da string meta_value. Portanto, o exemplo 'Pat%' pode não retornar nenhum resultado.

    
por bobbingwide 13.10.2013 / 22:13