Consultar vários valores de meta meta?
4 respostas
- votos
-
- 2012-03-13
Eu sinto que há ume/ou confusão acontecendo aqui.
As consultasno OP só retornampostagens quetêm ambos key1='value1'e key2='value2'. Amaioria dosplugins WP (queeu conheço,de qualquermaneira) Não armazene vários valoresno PostMeta,para omesmopost,usando amesmatecla.
Se o que você quer é realmente um ou (você quer obter aspostagensem que key1='value1',bem como aspostagens onde key1='value2'),então veja a resposta @ Whiskersandwich,usando 'in'e Matriz de valorespara oparâmetro de valor.
Alternativamente,vocêpodefornecer uma relação
relation
parâmetropara `meta_query ':$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Observe que o uso ou como a relação de várias consultas demeta usando amesmatecla é oequivalentefuncional do uso
IN
e umamatriz de valorespara um único.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.-
Obrigadoporisso,Boone.Eunão sabia que a "relação"paramexistia.Me ajudou.Thanks for this, Boone. I didn't know the "relation" param existed. Helped me out.
- 0
- 2012-03-21
- MathSmath
-
Issofunciona se vocêtiver apenas uma chaveparapesquisar.Se vocêtiver dois oumais,talvez sejanecessário usar "e"para combiná-losnoparâmetro de relacionamento,casoem que a resposta @ Whiskersandwich abaixo é amelhorforma.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
Eutive omesmoproblemaem quepassarmúltiplasmatrizespara amesma chavenãoestavafuncionando.Em vez disso,basta usar umamatriz,definir 'valor'para umamatriz de valorese definir 'comparar'paraem:
<?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
Vocêtem que alias atabela PostMetapara o 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 ";
Vocêtambémpodefazerisso agora desde 3.1 com um
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 );
-
Oi Milo obrigadopor responder.O SQLnão retornanenhum valor.E amatrizestá retornandonenhum valor,amenos que remova a 2ª chavee valor damatriz.Então éissobugged?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 - Eunãotenho certeza do que é o seuproblema,testei os doismétodose elesestãotrabalhandonaminhainstalação de 3.3.1.Sua chave é literalmente "key1"e valores "valor1"e "valor2"?Vocênão vênada se você "print_r ($the_Query)"imediatamente após a 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
chave é key1e valores 'valor1'e 'value2'tentoutantotexto quantonuméricoem umanovainstalação com vinte onze.print_r ($the_query);Obras de saídaparecenormal.Tambémtentou Key1e Key2tambémnãofunciona.Elefunciona assim queeu a limitepara umamatriz.Verificado com diferentesnavegadores.
Isso,noentanto,funciona.
<?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 ); ?>
Como consultar os valores da chave Metaple com amesma chave
próximo código