it-swarm.com.de

Meta_query Vergleichsoperator Erklärung

Ich habe festgestellt, dass es eine Reihe von Operatoren gibt, die zum Vergleichen in meta_query verwendet werden können. Ich bin mir jedoch nicht ganz sicher, welchen Operator ich verwenden soll, es ist irgendwie verwirrend wie = und LIKE operator.

Ich möchte wissen, was genau jeder Operator bedeutet und in welchem ​​Zustand ich sie verwenden sollte.

=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS

Vielen Dank.

35
dev-jim

Die ersten paar Arbeiten ungefähr so, wie Sie es erwarten würden:

=   equals
!=  does not equal
>   greater than
>=  greater than or equal to
<   less than
<=  less than or equal to

LIKE und NOT LIKE sind SQL-Operatoren, mit denen Sie Platzhaltersymbole hinzufügen können, sodass Sie möglicherweise eine Metaabfrage erhalten, die folgendermaßen aussieht:

array( 
    'key' => 'name', 
    'value' => 'Pat', 
    'compare' => 'LIKE'
)

Dies würde alle Posts zurückgeben, bei denen der Meta-Wert "name" die Zeichenfolge "Pat" enthält. In diesem Fall würden "Pat", "Patricia" und "Patrick" an Sie zurückgegeben. Es gibt eine Erklärung für ein Tutorial, das nicht von WordPress stammt hier .

Das Hinzufügen des Platzhalterzeichens % ist nicht erforderlich, da es standardmäßig hinzugefügt wird, wie @Herb unter answer sagte. So: $meta_value = '%' . like_escape( $meta_value ) . '%'; - siehe source .

IN und NOT IN wählen Übereinstimmungen aus, die sich im angegebenen Array befinden (oder nicht). Sie könnten also so etwas tun:

array(
    'key'     => 'color', 
    'value'   => array('red', 'green', 'blue') 
    'compare' => 'IN'
)

und es würden alle Beiträge erhalten, deren Farbe entweder auf Rot, Grün oder Blau eingestellt ist. Wenn Sie 'NOT IN' verwenden, werden alle Posts umgekehrt, für die ein anderer Wert als der des Arrays festgelegt wurde.

Die generierte SQL dafür würde ungefähr so ​​aussehen:

SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue") 

Mit BETWEEN und NOT BETWEEN können Sie einen Wertebereich definieren, der korrekt sein kann, und Sie müssen in Ihrer meta_query zwei Werte in einem Array angeben:

array( 
    'key' => 'price', 
    'value' => array(20,30) 
    'compare' => 'BETWEEN'
)

Dadurch erhalten Sie alle Posts, bei denen der Preis zwischen 20 und 30 liegt. Diese Person gräbt in ein Beispiel mit Datumsangaben.

NOT EXISTS ist genau so, wie es sich anhört - der Metawert ist nicht festgelegt oder auf einen Nullwert festgelegt. Alles, was Sie für diese Abfrage benötigen, ist der Schlüssel- und Vergleichsoperator:

array( 
    'key' => 'price', 
    'compare' => 'NOT EXISTS'
)

Diese Person musste nicht vorhandene Meta-Werte abfragen und brauchte sie, um Nizza mit anderen zu spielen.

Hoffe das hilft!

48
guiniveretoo

Beachten Sie, dass WordPress bei Verwendung eines meta_compare-Werts von 'LIKE' automatisch das Platzhalterzeichen (%) um die meta_value-Zeichenfolge herumführt. Das Beispiel 'Pat%' kann also keine Ergebnisse zurückgeben.

8
bobbingwide