Meta_query compara la explicación del operador

37

Noté que hay muchos operadores que se pueden usar para comparar en meta_query. Sin embargo, no estoy muy seguro de lo que debería utilizar el operador, que es de alguna manera confusa como =y LIKEoperador.

Me gustaría saber qué significa exactamente cada operador, y en qué condición debería usarlos.

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

Gracias.

dev-jim
fuente

Respuestas:

50

Los primeros trabajos funcionan como es de esperar:

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

LIKEy NOT LIKEson operadores SQL que le permiten agregar símbolos comodín, por lo que podría tener una metaconsulta que se vea así:

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

Esto devolvería todas las publicaciones donde el metavalor "nombre" tiene la cadena "Pat". En este caso, "Pat", "Patricia" y "Patrick" serían devueltos a usted. Hay una explicación tutorial que no es de WordPress aquí .

Agregar el carácter comodín %no es necesario, porque se agrega de forma predeterminada como @Herb dijo en su respuesta a continuación . Así: $meta_value = '%' . like_escape( $meta_value ) . '%';- ver fuente .

INy NOT INseleccione cualquier coincidencia que esté en (o no en) la matriz dada. Entonces podrías hacer algo como esto:

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

y obtendría todas las publicaciones que tienen el color establecido en rojo, verde o azul. El uso de 'NO EN' obtiene lo contrario, cualquier publicación que tenga un valor establecido en algo más que lo que está en la matriz.

El SQL generado para esto se vería así:

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

BETWEENy le NOT BETWEENpermite definir un rango de valores que podría ser correcto, y le exige que proporcione dos valores en una matriz en su meta_query:

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

Esto te llevará a todas las publicaciones donde el precio esté entre 20 y 30. Esta persona busca un ejemplo con fechas.

NOT EXISTSes exactamente como suena: el metavalor no está establecido o está establecido en un valor nulo. Todo lo que necesita para esa consulta es la clave y el operador de comparación:

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

Esta persona necesitaba consultar meta valores inexistentes, y necesitaba que jugaran bien con los demás.

¡Espero que esto ayude!

Jen
fuente
Nota: Si está utilizando una meta_querymatriz, sus claves no deben tener el prefijo meta_. Si está utilizando $query->meta_key, $query->meta_valueetc., estos deberían conservar el prefijo.
Sean
Parece que no puedo encontrar una explicación sobre lo que hace la opción de comparación "IN". ¿Alguna idea de cómo funciona?
Joe
1
@ Joe, no sé por qué no agregué nada sobre "IN" y "NOT IN". He editado y actualizado la respuesta con esas comparaciones.
Jen
7

Tenga en cuenta que cuando usa un valor meta_compare de 'LIKE', WordPress ajusta automáticamente el carácter comodín (%) alrededor de la cadena meta_value. Por lo tanto, el ejemplo 'Pat%' podría no devolver ningún resultado.

balanceándose
fuente
¿hay información sobre eso en los documentos en algún lugar de Herb? ¿Debería cambiar el ejemplo para eliminar el %?
Jen
Debería, de hecho lo hice en este momento, ver la fuente , luego queda muy claro que Herb tiene razón. @guiniveretoo
Nicolai