Meta_query Vergleich Operator Erklärung
2 Antworten
- Stimmen
-
- 2012-10-29
Dieersten Arbeitenfunktionieren wieerwartet:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE und NOT LIKE
LIKE
undNOT LIKE
sind SQL-Operatoren,mit denen Sie Platzhaltersymbole hinzufügen können,sodass Siemöglicherweiseeine Metaabfrage haben,diefolgendermaßen aussieht:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
Dies würde alle Beiträge zurückgeben,bei denen der Metawert "name" die Zeichenfolge "Pat" hat. In diesem Fall werden "Pat","Patricia" und "Patrick" an Sie zurückgegeben. Hierfinden Sieeine Erklärung zueinem Tutorial,dasnicht von WordPress stammt: hier .
Das Hinzufügen des Platzhalterzeichens
%
istnichterforderlich,daes standardmäßig hinzugefügt wird,wie @Herb untenin Antwort . So:$meta_value = '%' . like_escape( $meta_value ) . '%';
- siehe source .
IN und NOT IN
IN
undNOT IN
wählen alle Übereinstimmungen aus,die sichin dem angegebenen Arraybefinden (odernicht). Sie könnten also soetwastun:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
undes werden alle Posts angezeigt,deren Farbeentweder auf Rot,Grün oder Blaueingestelltist. Bei Verwendung von 'NOT IN' werden alle Posts umgekehrt,deren Wert aufeinen anderen Wert als denim Arrayfestgelegtenfestgelegtist.
Das dafürgenerierte SQL würde ungefähr so aussehen:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
ZWISCHEN und NICHT ZWISCHEN
MitBETWEEN
undNOT BETWEEN
können Sieeinen Wertebereich definieren,der korrekt sein kann,und Siemüssenin Ihrermeta_query zwei Wertein einem Array angeben:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
Damiterhalten Sie alle Beiträge,bei denen der Preis zwischen 20 und 30 liegt. Diese Person befasst sichmit einem Beispielmit Datumsangaben.
NICHT EXISTIERT
NOT EXISTS
istgenau so,wiees sich anhört - der Metawertistnicht oder aufeinen Nullwertgesetzt. Für diese Abfragebenötigen Sie lediglich den Schlüssel- und Vergleichsoperator:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
Diese Person musste Nicht- vorhandene Meta-Werte undbrauchten sie,umgutmit anderen zu spielen.
Hoffe das hilft!
The first several work as you would expect:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE and NOT LIKE
LIKE
andNOT LIKE
are SQL operators that let you add in wild-card symbols, so you could have a meta query that looks like this:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
This would return all posts where the meta value "name" has the string "Pat". In this case, "Pat" "Patricia" and "Patrick" would all be returned back to you. There's a non-WordPress tutorial explanation here.
Adding the wildcard character
%
isn't necessary, because it gets added by default like @Herb said in his below answer. Like this:$meta_value = '%' . like_escape( $meta_value ) . '%';
- see source.
IN and NOT IN
IN
andNOT IN
select any matches that are in (or not in) the given array. So you could do something like this:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
and it would get all posts that have the color set to either red, green, or blue. Using 'NOT IN' gets the reverse, any posts that have a value set to anything else than what's in the array.
The generated SQL for this would look something like this:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN and NOT BETWEEN
BETWEEN
andNOT BETWEEN
allow you to define a range of values that could be correct, and require you to give two values in an array in your meta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
This will get you all posts where the price is between 20 and 30. This person digs into an example with dates.
NOT EXISTS
NOT EXISTS
is just like what it sounds - the meta value isn't set or is set to a null value. All you need for that query is the key and comparison operator:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
This person needed to query non-existent meta values, and needed them to play nice with others.
Hope this helps!
-
Hinweis: Wenn Sie das Array "meta_query" verwenden,sollte Ihren Schlüsseln kein "meta_" vorangestellt werden.Wenn Sie "$ query->meta_key","$ query->meta_value" usw. verwenden,sollten diese weiterhin das Präfixbehalten.Note: If you're using `meta_query` array, your keys should not be prefixed with `meta_`. If you're using `$query->meta_key`, `$query->meta_value`, etc. then these should still retain the prefix.
- 1
- 2014-08-20
- Sean
-
Ich kann anscheinend keine Erklärung dafürfinden,was die Vergleichsoption "IN"bewirkt.Irgendeine Idee,wie dasfunktioniert?I can't seem to find an explanation on what the "IN" compare option does. Any idea how that works?
- 0
- 2015-03-09
- Joe
-
@ Joe,ich weißnicht,warumichnichts über "IN" und "NOT IN" hinzugefügt habe.Ich habe die Antwortmit diesen Vergleichenbearbeitet und aktualisiert.@Joe, I don't know why I didn't add anything about "IN" and "NOT IN". I've edited and updated the answer with those comparisons.
- 2
- 2015-03-09
- Jen
-
Diesisteine großartige Antwort,aberes stehenjetzteinige weitere Optionen zur Verfügung: https://codex.wordpress.org/Class_Reference/WP_Meta_QueryThis is a great answer but there are some more options available now-: https://codex.wordpress.org/Class_Reference/WP_Meta_Query
- 0
- 2020-08-28
- noelmcg
-
'EXISTS','REGEXP','NOT REGEXP' und 'RLIKE''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
Beachten Sie,dass WordPressbei Verwendungeinesmeta_compare-Werts von 'LIKE' das Platzhalterzeichen (%) automatisch um diemeta_value-Zeichenfolge umschließt.Das Beispiel 'Pat%' kann dahermöglicherweise keine Ergebnisse zurückgeben.
Note that when using a meta_compare value of 'LIKE', WordPress automatically wraps the wildcard character ( % ) around the meta_value string. So the 'Pat%' example could fail to return any results.
-
Gibtes Informationen dazuin den Dokumentenirgendwo Herb?Sollte sich das Beispiel ändern,um das% zuentfernen?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
Es sollte,das habeichjetzttatsächlichgetan,die [Quelle] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841) dann sehenes wird sehr deutlich,dass Herb Recht hat.@guiniveretooIt should, I actually did that right now, see the [source](https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841), then it gets very clear that Herb is right. @guiniveretoo
- 0
- 2014-04-08
- Nicolai
Ich habefestgestellt,dasseseine Reihe von Operatorengibt,die zum Vergleichenin meta_query verwendet werden können. Ichbin mirjedochnichtganz sicher,welchen Operatorich verwenden soll. Esistirgendwie verwirrend wie der Operator
=
undLIKE
.Ichmöchte wissen,wasgenaujeder Operatorbedeutet undin welchem Zustandichihn verwenden soll.
Danke.