Query più valori di meta chiave?
4 risposta
- voti
-
- 2012-03-13
Mi sembra che ci sia una confusione AND/ORin corso qui.
Le querynell'OP restituiranno soloi post che hanno entrambi key1='value1' AND key2='value2'. Lamaggiorparte deiplugin WP (cheio sappia,comunque)nonmemorizzapiù valoriin postmeta,per lo stessopost,utilizzando la stessa chiave.
Se quello che vuoi è davvero un OR (vuoi ottenerei post dove key1='value1',così comei post dove key1='value2'),vedi la risposta di @ WhiskerSandwich,usando 'IN'e unmatrice di valoriperilparametro value.
In alternativa,puoifornire unparametro
relation
a `meta_query ':$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Nota che l'utilizzo di OR come relazioneperpiùmeta query utilizzando la stessa chiave è l'equivalentefunzionale dell'utilizzo di
IN
e un array di valoriper uno solo.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.-
Grazieper questo,Boone.Non sapevo cheesistesseilparametro "relazione".Mi ha aiutato.Thanks for this, Boone. I didn't know the "relation" param existed. Helped me out.
- 0
- 2012-03-21
- MathSmath
-
Funziona se hai solo una chiave su cui cercare.Sene hai due opiù,potresti dover utilizzare "AND"per combinarlinelparametro di relazione,nel qual caso la risposta di @ WhiskerSandwich di seguito è la soluzionemigliore.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
Ho avuto lo stessoproblemain cuiilpassaggio dipiù arrayper la stessa chiavenonfunzionava.Invece,usa solo un array,imposta "value" su un array di valorie imposta "compare" su 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
Devi creare l'alias dellatabellapostmetaperil secondo valore:
$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 ";
Puoifarlo anche ora dalla 3.1 con un
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 );
-
Ciao Milograzieper aver risposto.L'SQLnon restituisce alcun valore.E l'arraynon restituisce alcun valore ameno chenon rimuova la seconda chiavee il valore dall'array.Quindi questo èinfastidito?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
-
@ sedici - Non sono sicuro di quale siailtuoproblema,hotestatoentrambii metodie funzionanonellamiainstallazione di 3.3.1.Latua chiave è letteralmente "chiave1"e i valori "valore1"e "valore2"?Non vedinulla se `print_r ($the_query);`immediatamente dopo la query?@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 chiave è chiave1e i valori "valore1"e "valore2" l'hannoprovata sia ditesto chenumericain unanuovainstallazione con venti undici.print_r ($the_query);funziona l'output sembranormale.Ancheprovato key1e key2nonfunziona.Funzionanon appena lo limito a un array.Controllato con diversibrowser.
Questoperòfunziona.
<?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 ); ?>
Comeeseguire queryperpiù valori dimeta-chiave con la stessa chiave
codice successivo