¿Consultar varios valores clave meta?
4 respuestas
- votos
-
- 2012-03-13
Siento que hay una confusión Y/O aquí.
Las consultasen el OP solo devolveránpublicaciones quetengan tanto key1='value1' AND key2='value2'. Lamayoría de los complementos de WP (que yo sepa,detodosmodos)no almacenanmúltiples valoresen postmeta,para lamismapublicación,usando lamisma clave.
Si lo que quiereses realmente un OR (quieres obtener laspublicaciones donde key1='value1',así como laspublicaciones donde key1='value2'),entoncesmira la respuesta de @ WhiskerSandwich,usando 'IN' y unmatriz de valoresparaelparámetro de valor.
Alternativamente,puedeproporcionar unparámetro de
relation
a `meta_query ':$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Tengaen cuenta queel uso de OR como la relaciónparamúltiplesmetaconsultas que usan lamisma claveeselequivalentefuncional de usar
IN
y unamatriz de valorespara una sola.I feel like there's an AND/OR confusion going on here.
The queries in the OP will only return posts which have both key1 = 'value1' AND key2 = 'value2'. Most WP plugins (that I know of, anyway) do not store multiple values in postmeta, for the same post, using the same key.
If what you want is really an OR (you want to get the posts where key1 = 'value1', as well as the posts where key1 = 'value2'), then see @WhiskerSandwich's answer, using 'IN' and an array of values for the value parameter.
Alternatively, you can provide a
relation
parameter to `meta_query':$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Note that using OR as the relation for multiple meta queries using the same key is the functional equivalent of using
IN
and an array of values for a single one.-
Graciasporesto,Boone.No sabía queexistíaelparámetro "relación".Me ayudó.Thanks for this, Boone. I didn't know the "relation" param existed. Helped me out.
- 0
- 2012-03-21
- MathSmath
-
Estofunciona si solotiene una claveparabuscar.Sitiene dos omás,esposible que deba usar 'Y'para combinarlosen elparámetro de relación,en cuyo caso la respuesta de @ WhiskerSandwich a continuaciónes la quemejor se ajusta.This works if you only have one key to search on. If you have two or more, you may need to use 'AND' to combine them in the relationship parameter, in which case @WhiskerSandwich's answer below is the better fit.
- 0
- 2015-04-21
- SinisterBeard
-
- 2012-03-13
Tuveelmismoproblemaen el quepasar variasmatricespara lamisma clavenofuncionaba.En su lugar,solo use unamatriz,establezca 'valor'en unamatriz de valores yestablezca 'comparar'en IN:
<?php $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => array('value1', 'value2'), 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); ?>
I had the same problem where passing multiple arrays for the same key wasn't working. Instead, just use one array, set 'value' to an array of values, and set 'compare' to IN:
<?php $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => array('value1', 'value2'), 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); ?>
-
- 2012-01-27
Debe asignar un alias a latablapostmetaparael segundo valor:
$querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1 WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'key1' AND $wpdb->postmeta.meta_value = 'value1' AND mt1.meta_key = 'key1' AND mt1.meta_value = 'value2' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ORDER BY $wpdb->posts.post_date DESC ";
Tambiénpuede haceresto ahora desde 3.1 con una
meta_query
:$args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $query = new WP_Query( $args );
You have to alias the postmeta table for the second value:
$querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1 WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'key1' AND $wpdb->postmeta.meta_value = 'value1' AND mt1.meta_key = 'key1' AND mt1.meta_value = 'value2' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ORDER BY $wpdb->posts.post_date DESC ";
You can also do this now since 3.1 with a
meta_query
:$args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $query = new WP_Query( $args );
-
Hola Milograciaspor responder.El SQLno devuelveningún valor.Y lamatriztampoco devuelveningún valor amenos queelimine la segunda clave yel valor de lamatriz.Entonces,¿estotiene errores?Hi Milo thanks for answering. The SQL returns no value. And the array is returning no value as well unless I remove the 2nd key and value from the array. So is this bugged?
- 0
- 2012-01-27
- steen
-
@steen:noestoy seguro de cuáles suproblema,probé ambosmétodos yfuncionanen miinstalación de 3.3.1.¿Su clavees literalmente 'clave1' y los valores 'valor1' y 'valor2'?¿No venada si `print_r ($the_query);`inmediatamente después de la consulta?@steen - I'm not sure what your issue is, I've tested both methods and they are working in my install of 3.3.1. Is your key literally 'key1' and values 'value1' and 'value2'? Do you see nothing if you `print_r( $the_query );` immediately after the query?
- 0
- 2012-01-27
- Milo
-
- 2012-01-27
La clavees key1 y los valores 'value1' y 'value2' loprobarontanto detexto comonuméricoen unainstalaciónnueva con veinte once.print_r ($the_query);funciona la salidaparecenormal.Tambiénprobé key1 y key2tampocofunciona.Funcionatanpronto como lo limito a unamatriz.Comprobado con diferentesnavegadores.
Sinembargo,estofunciona.
<?php $args = array( 'meta_query' => array( array( 'key' => 'wtf', 'value' => '1', 'compare' => '>=' ), // this array results in no return for both arrays array( 'key' => 'wtf', 'value' => '2', 'compare' => '<=' ) ) ); $the_query = new WP_Query( $args ); ?>
Key is key1 and values 'value1' and 'value2' tried it both text and numeric in a fresh install with twenty eleven. print_r( $the_query ); works output looks normal. Also tried key1 and key2 also doesn't work. It works as soon as I limit it to to one array. Checked with different browsers.
This however does work.
<?php $args = array( 'meta_query' => array( array( 'key' => 'wtf', 'value' => '1', 'compare' => '>=' ), // this array results in no return for both arrays array( 'key' => 'wtf', 'value' => '2', 'compare' => '<=' ) ) ); $the_query = new WP_Query( $args ); ?>
Cómo consultar varios valores clavemeta con lamisma clave
siguiente código