Consulta vários valores de meta-chave?

Como consultar os valores das meta-teclas mutiple com a mesma tecla

$querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'key1' AND $wpdb->postmeta.meta_value = 'value1' // why doesn't this work? AND $wpdb->postmeta.meta_value = 'value2' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ORDER BY $wpdb->posts.post_date DESC "; 

próximo código

  array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), // this array results in no return for both arrays array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $the_query = new WP_Query( $args ); ?>  have_posts() ) : $the_query->the_post(); ?>   

Solutions Collecting From Web of "Consulta vários valores de meta-chave?"

Eu sinto que há uma confusão AND / OR acontecendo aqui.

As consultas no OP apenas retornarão posts que tenham ambos key1 = ‘value1’ AND key2 = ‘value2’. A maioria dos plugins WP (que eu conheço, de qualquer maneira) não armazenam vários valores na pós-tarefa, para a mesma publicação, usando a mesma chave.

Se o que você quer é realmente um OR (você deseja obter as postagens onde key1 = ‘value1’, bem como as postagens onde key1 = ‘value2’), então @ WhiskerSandwich’s resposta acima, usando ‘IN’ e uma matriz de valores para o parâmetro de valor.

Alternativamente, você pode fornecer um parâmetro de relation para `meta_query ‘:

 $args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); 

Note que usar OR como a relação para múltiplas meta-consultas usando a mesma chave é o equivalente funcional de usar IN e uma matriz de valores para uma única.

Tive o mesmo problema em que a passagem de vários arrays para a mesma chave não estava funcionando. Em vez disso, basta usar uma matriz, definir ‘valor’ para uma matriz de valores e definir ‘comparar’ para IN:

 < ?php $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => array('value1', 'value2'), 'compare' => 'IN' ), ) ); $query = new WP_Query( $args ); ?> 

Você deve alias a tabela pós-meta para 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ém pode fazer isso agora desde 3.1 com uma meta_query :

 $args = array( 'meta_query' => array( array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) ); $query = new WP_Query( $args ); 

Key is key1 e values ​​’value1′ e ‘value2’ tentaram texto e numérico em uma nova instalação com vinte e onze. print_r ($ the_query); A produção de trabalhos parece normal. Também tentou key1 e key2 também não funcionar. Funciona assim que eu o limite para uma matriz. Verificado com navegadores diferentes.

Isso no entanto 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 ); ?>