Mehrere Meta-Schlüsselwerte abfragen?
4 Antworten
- Stimmen
-
- 2012-03-13
Ich habe das Gefühl,dass hiereine UND/ODER-Verwirrung herrscht.
Die Abfragenim OPgeben nur Posts zurück,die beide key1='value1' UND key2='value2' haben. Diemeisten WP-Plugins (von denenich sowieso weiß) speichernnichtmehrere Wertein Postmetafür denselben Beitragmit demselben Schlüssel.
Wenn Sie wirklichein ODERmöchten (Siemöchten die Beiträgemit key1='value1' sowie die Beiträgemit key1='value2'erhalten),lesen Sie die Antwort von @ WhiskerSandwichmit 'IN' undeinem Array von Wertenfür den Wertparameter.
Alternativ können Sieeinen
relation
-Parameterfür `meta_query 'angeben:$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'key1', 'value' => 'value1', 'compare' => '=' ), array( 'key' => 'key1', 'value' => 'value2', 'compare' => '=' ) ) );
Beachten Sie,dass die Verwendung von OR als Beziehungfürmehrere Metaabfragenmit demselben Schlüssel dasfunktionale Äquivalent zur Verwendung von
IN
undeinem Array von Wertenfüreine einzelneist.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.-
Danke dafür,Boone.Ich wusstenicht,dass der Parameter "Beziehung"existiert.Hatmirgeholfen.Thanks for this, Boone. I didn't know the "relation" param existed. Helped me out.
- 0
- 2012-03-21
- MathSmath
-
Diesfunktioniert,wenn Sienureinen Schlüssel zum Suchen haben.Wenn Sie zwei odermehr haben,müssen Siemöglicherweise 'AND' verwenden,um sieim Beziehungsparameter zu kombinieren. In diesem Fallpasst die Antwort von @ WhiskerSandwich untenbesser.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
Ich hatte dasgleiche Problem,bei dem das Übergebenmehrerer Arraysfür denselben Schlüsselnichtfunktionierte.Verwenden Sie stattdessennurein Array,setzen Sie 'value' aufein Array von Werten und setzen Sie 'compare' auf 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
Siemüssen die Postmeta-Tabellefür den zweiten Wert aliasen:
$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 ";
Sie können diesjetzt seit 3.1 auchmit einer
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 );
-
Hallo Milo,dankefür die Antwort.Die SQLgibt keinen Wert zurück.Und das Arraygibt auch keinen Wert zurück,es sei denn,ichentferne den 2. Schlüssel und den Wert aus dem Array.Alsoist das abgehört?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 - Ichbin nicht sicher,was Ihr Problemist. Ich habebeide Methodengetestet und siefunktionierenin meiner Installation von 3.3.1.Ist Ihr Schlüsselbuchstäblich "Schlüssel1" und Werte "Wert1" und "Wert2"?Sehen Sienichts,wenn Sie unmittelbarnach der Abfrage `print_r ($the_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
Schlüsselist Schlüssel1 und die Werte 'Wert1' und 'Wert2' habenesin einer Neuinstallationmit elf versucht,sowohltextlich als auchnumerisch.print_r ($the_query);Arbeitsausgabe siehtnormal aus.Auch versucht key1 und key2funktioniert auchnicht.Esfunktioniert,sobaldiches aufein Arraybeschränke.Mit verschiedenen Browsern überprüft.
Diesfunktioniertjedoch.
<?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 ); ?>
Abfragenmehrerer Meta-Schlüsselwertemit demselben Schlüssel
nächster Code