web-dev-qa-db-fra.com

Explication de l'opérateur de comparaison Meta_query

J'ai remarqué qu'il y a beaucoup d'opérateurs qui peuvent être utilisés pour comparer dans meta_query. Cependant, je ne suis pas tout à fait sûr de savoir quel opérateur je devrais utiliser, il est en quelque sorte déroutant comme l'opérateur = et LIKE.

J'aimerais savoir ce que chaque opérateur veut dire exactement et dans quel état je devrais les utiliser.

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

Merci.

35
dev-jim

Les premiers travaux sur ce que vous attendez:

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

LIKE et NOT LIKE sont des opérateurs SQL qui vous permettent d'ajouter des symboles de caractères génériques. Vous pouvez donc avoir une méta-requête ressemblant à ceci:

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

Cela renverrait toutes les publications où la méta valeur "name" a la chaîne "Pat". Dans ce cas, "Pat" "Patricia" et "Patrick" vous seraient tous renvoyés. Il y a une explication de tutoriel autre que WordPress ici .

L'ajout du caractère générique % n'est pas nécessaire, car il est ajouté par défaut, comme @Herb l'a indiqué dans sa sous answer . Comme ceci: $meta_value = '%' . like_escape( $meta_value ) . '%'; - voir source .

IN et NOT IN sélectionnent toutes les correspondances qui sont dans (ou non) le tableau donné. Donc, vous pourriez faire quelque chose comme ça:

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

et tous les articles dont la couleur est définie sur le rouge, le vert ou le bleu sont affichés. L'utilisation de 'NOT IN' obtient l'inverse, toute publication dont la valeur est définie sur autre chose que ce qui est dans le tableau.

Le SQL généré pour cela ressemblerait à ceci:

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

BETWEEN et NOT BETWEEN vous permettent de définir une plage de valeurs pouvant être correcte et vous obligent à donner deux valeurs dans un tableau dans votre méta_query:

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

Vous obtiendrez ainsi tous les messages dont le prix est compris entre 20 et 30. Cette personne creuse dans un exemple avec des dates.

NOT EXISTS est juste comme ce que ça sonne - la méta-valeur n'est pas définie ou est définie sur une valeur null. Tout ce dont vous avez besoin pour cette requête est la clé et l'opérateur de comparaison:

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

Cette personne avait besoin d'interroger des méta-valeurs inexistantes, et avait besoin d'eux pour jouer à Nice avec d'autres.

J'espère que cela t'aides!

48
guiniveretoo

Notez que lorsque vous utilisez une valeur meta_compare de 'LIKE', WordPress enveloppe automatiquement le caractère générique (%) autour de la chaîne meta_value. Ainsi, l'exemple 'Pat%' pourrait ne pas renvoyer de résultats.

8
bobbingwide