Explicación del operador de comparación de meta_query
2 respuestas
- votos
-
- 2012-10-29
Losprimerosfuncionan comoera deesperar:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
ME GUSTA y NO ME GUSTA
LIKE
yNOT LIKE
son operadores SQL que lepermiten agregar símbolos comodín,por lo quepodríatener unameta consulta que se vea así:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
Esto devolveríatodas laspublicaciones dondeel valormeta "nombre"tiene la cadena "Pat". Eneste caso,"Pat","Patricia" y "Patrick" le serán devueltos. Hay unaexplicación deltutorial quenoes de WordPress aquí .
Noesnecesario agregarel carácter comodín
%
,porque se agrega deformapredeterminada como @Herb dijoen su siguiente respuesta . Así:$meta_value = '%' . like_escape( $meta_value ) . '%';
: consulte fuente .
EN y NO EN
IN
yNOT IN
seleccionan cualquier coincidencia queestéen (ono) lamatriz dada. Entoncespodrías hacer algo comoesto:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
y obtendríatodas laspublicaciones quetenganel colorestablecidoen rojo,verde o azul. El uso de 'NOT IN' obtiene lo contrario,cualquierpublicación quetenga un valorestablecidoen cualquier otra cosa queno sea lo queestáen lamatriz.
El SQLgeneradoparaesto se vería así:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
ENTRE y NO ENTRE
BETWEEN
yNOT BETWEEN
te permiten definir un rango de valores quepodrían ser correctos y requieren queproporciones dos valoresen unamatrizen tumeta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
Esto le darátodas laspublicaciones dondeelprecioestéentre 20 y 30. Estapersona profundizaen unejemplo confechas.
NO EXISTE
NOT EXISTS
esexactamente como suena:el valormetanoestáestablecido oestáestablecidoen un valornulo. Todo lo quenecesitaparaesa consultaesel operador clave y de comparación:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
Estapersona necesitaba realizar una consultano valoresmetaexistentes,y losnecesitabaparajugarbien con los demás.
¡Espero queestote ayude!
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: Siestá utilizando lamatriz `meta_query`,sus clavesno debentenerelprefijo`meta_`.Siestá usando `$ query->meta_key`,` $ query->meta_value`,etc.,entoncesestos deberían conservarelprefijo.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
-
Parece quenopuedoencontrar unaexplicación sobre lo que hace la opción de comparación "IN".¿Algunaidea de cómofunciona?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,no sépor quéno agreguénada sobre "IN" y "NOT IN".Heeditado y actualizado la respuesta conesas comparaciones.@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
-
Estaes unagran respuesta,pero hay algunas opcionesmás disponibles ahora: 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
-
'EXISTS','REGEXP','NOT REGEXP' y 'RLIKE''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
Tengaen cuenta que cuando se utiliza un valormeta_compare de 'LIKE',WordPressenvuelve automáticamenteel carácter comodín (%) alrededor de la cadenameta_value.Por lotanto,elejemplo 'Pat%'podríano devolverningún resultado.
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.
-
¿Hayinformación sobreesoen los documentosen algún lugar de Herb?¿Debería cambiarelejemploparaeliminarel `%`?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
Debería,de hecho lo hice ahora,consulte la [fuente] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841),luegoquedamuy claro que Herbtiene razón.@guiniveretooIt 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
Me di cuenta de que haymuchos operadores que sepueden usarpara compararen meta_query. Sinembargo,noestoymuy seguro de qué operador debo usar,de algunamaneraes confuso comoel operador
=
yLIKE
.Megustaría saber qué significaexactamente cada operador yen qué condiciones debo usarlos.
Gracias.