Explicación del operador de comparación meta_query
He notado que hay varios operadores que se pueden usar para comparar en meta_query.
Sin embargo, no estoy muy seguro de qué operador debo usar, es algo confuso como los operadores =
y LIKE
.
Me gustaría saber exactamente qué significa cada operador y en qué condición debería usarlos.
= // Igual a
!= // No igual a
> // Mayor que
>= // Mayor o igual que
< // Menor que
<= // Menor o igual que
LIKE // Similar a (búsqueda parcial)
NOT LIKE // No similar a
IN // Está en un conjunto de valores
NOT IN // No está en un conjunto de valores
BETWEEN // Entre dos valores
NOT BETWEEN // No está entre dos valores
NOT EXISTS // No existe
Gracias.

Los primeros operadores funcionan como cabría esperar:
= igual
!= no igual
> mayor que
>= mayor o igual que
< menor que
<= menor o igual que
LIKE y NOT LIKE
LIKE
y NOT LIKE
son operadores SQL que permiten usar caracteres comodín, por lo que podrías tener una consulta de metadatos como esta:
array(
'key' => 'nombre',
'value' => 'Pat',
'compare' => 'LIKE'
)
Esto devolvería todas las entradas donde el valor de metadatos "nombre" contenga la cadena "Pat". En este caso, se devolverían "Pat", "Patricia" y "Patrick". Hay una explicación no relacionada con WordPress aquí.
No es necesario añadir el carácter comodín %
, ya que se añade por defecto como mencionó @Herb en su respuesta más abajo. Así: $meta_value = '%' . like_escape( $meta_value ) . '%';
- ver fuente.
IN y NOT IN
IN
y NOT IN
seleccionan coincidencias que están (o no están) en el array proporcionado. Podrías hacer algo como esto:
array(
'key' => 'color',
'value' => array('rojo', 'verde', 'azul')
'compare' => 'IN'
)
y obtendría todas las entradas que tienen el color establecido como rojo, verde o azul. Usar 'NOT IN' obtiene lo contrario, cualquier entrada que tenga un valor diferente a los del array.
El SQL generado para esto se vería algo así:
SELECT * FROM posts_meta WHERE value IN ("rojo", "verde", "azul")
BETWEEN y NOT BETWEEN
BETWEEN
y NOT BETWEEN
permiten definir un rango de valores válidos, y requieren que proporciones dos valores en un array en tu meta_query:
array(
'key' => 'precio',
'value' => array(20,30)
'compare' => 'BETWEEN'
)
Esto te dará todas las entradas donde el precio esté entre 20 y 30. Esta persona profundiza en un ejemplo con fechas.
NOT EXISTS
NOT EXISTS
es exactamente lo que parece: el valor de metadatos no está establecido o es nulo. Solo necesitas la clave y el operador de comparación para esta consulta:
array(
'key' => 'precio',
'compare' => 'NOT EXISTS'
)
Esta persona necesitaba consultar valores de metadatos inexistentes y que funcionaran bien con otros.
¡Espero que esto ayude!

Nota: Si estás usando el array meta_query
, tus claves no deben tener el prefijo meta_
. Si estás usando $query->meta_key
, $query->meta_value
, etc., entonces estos deben conservar el prefijo.

No encuentro una explicación sobre lo que hace la opción de comparación "IN". ¿Alguna idea de cómo funciona?

@Joe, no sé por qué no agregué nada sobre "IN" y "NOT IN". He editado y actualizado la respuesta con esas comparaciones.

Esta es una gran respuesta pero ahora hay algunas opciones más disponibles-: https://codex.wordpress.org/Class_Reference/WP_Meta_Query

¿hay información sobre eso en la documentación en algún lugar Herb? ¿Debería el ejemplo cambiar para eliminar el %
?

Debería, de hecho acabo de hacer eso, mira el código fuente, entonces queda muy claro que Herb tiene razón. @guiniveretoo
