Explication de l'opérateur de comparaison Meta_query
2 réponses
- votes
-
- 2012-10-29
Lespremierstravaux comme vous vousen doutez:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE et NOT LIKE
LIKE
etNOT LIKE
sont des opérateurs SQL qui vouspermettent d'ajouter des symbolesgénériques,vouspouvez donc avoir uneméta-requête qui ressemble à ceci:array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
Cela renverraittous lesmessages où laméta valeur "nom" a la chaîne "Pat". Dans ce cas,«Pat»,«Patricia»et «Patrick» vous seronttous retournés. Ilexiste uneexplication du didacticielnon WordPress ici .
L'ajout du caractèregénérique
%
n'estpasnécessaire,carilest ajoutépar défaut comme @Herb l'a dit ci-dessous réponse . Comme ceci:$meta_value = '%' . like_escape( $meta_value ) . '%';
- voir source .
IN et NOT IN
IN
etNOT IN
sélectionnenttoutes les correspondances qui sont dans (oupas dans) letableau donné. Vouspouvez doncfaire quelque chose comme ceci:array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
et il obtiendraittous lesmessages dont la couleurest définie sur rouge,vert oubleu. L'utilisation de 'NOT IN' obtient l'inverse,tous lesmessages qui ont une valeur définie sur autre chose que ce quiest dans letableau.
Le SQLgénérépour cela ressemblerait à ceci:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN et NOT BETWEEN
BETWEEN
etNOT BETWEEN
vouspermettent de définir uneplage de valeurs quipourraient être correctes,et vous oblige à donner deux valeurs dans untableau dans votremeta_query:array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
Vous obtiendrez ainsitous les articles dont leprixest comprisentre 20et 30. Cettepersonne fouille dans unexemple avec des dates.
N'EXISTE PAS
NOT EXISTS
estexactement comme ce qu'il sonne - laméta valeurn'estpas définie ouest définie sur une valeurnulle. Tout ce dont vous avezbesoinpour cette requêteest l'opérateur cléet de comparaison:array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
Cettepersonne devaitinterrogernon- desméta-valeursexistantes,et en avaitbesoinpourjouergentiment avec les autres.
J'espère que cela vous aidera!
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!
-
Remarque: Si vous utilisez letableau `meta_query`,vos clésne doiventpas êtreprécédées de`meta_`.Si vous utilisez `$ query->meta_key`,` $ query->meta_value`,etc.,alors ceux-ci devraienttoujours conserver lepréfixe.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
-
Jen'arrivepas àtrouver uneexplication sur ce quefait l'option de comparaison "IN".Uneidée de comment celafonctionne?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,je ne saispaspourquoije n'ai rien ajouté sur "IN"et "NOT IN".J'ai éditéet mis àjour la réponse avec ces comparaisons.@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
-
C'est uneexcellente réponse,maisilexistemaintenant d'autres options disponibles -: 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'et 'RLIKE''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
Notez que lorsque vous utilisez une valeurmeta_compare de 'LIKE',WordPressenveloppe automatiquement le caractèregénérique (%) autour de la chaînemeta_value.Ainsi,l'exemple 'Pat%'pourraitne pas renvoyer de résultats.
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.
-
y a-t-il desinformations à ce sujet dans la documentation quelquepart Herb?L'exemple devrait-il changerpour supprimer le «%»?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
Il devrait,je l'aifaiten faitmaintenant,voir la [source] (https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841),puisil devienttrès clair que Herb a raison.@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
J'ai remarqué que denombreux opérateurspeuvent être utiliséspour comparer dansmeta_query. Cependant,je ne saispastrop quel opérateurje devrais utiliser,c'est quelquepeu déroutant comme l'opérateur
=
etLIKE
.Je voudrais savoir ce que signifieexactement chaque opérateuret dans quelles conditionsje dois les utiliser.
Merci.