Meta_query比較演算子の説明
2 回答
- 投票
-
- 2012-10-29
期待どおりの最初のいくつかの作業:
= equals != does not equal > greater than >= greater than or equal to < less than <= less than or equal to
LIKE および NOT LIKE
LIKE
とNOT LIKE
は、ワイルドカード記号を追加できるSQL演算子であるため、次のようなメタクエリを作成できます.array( 'key' => 'name', 'value' => 'Pat', 'compare' => 'LIKE' )
これにより、メタ値「name」の文字列が「Pat」であるすべての投稿が返されます.この場合、「Pat」「Patricia」「Patrick」はすべて返送されます. WordPress以外のチュートリアルの説明が
ここにあります. ワイルドカード文字
%
を追加する必要はありません.これは、@ Herbが以下の回答.このように: $meta_value = '%' . like_escape( $meta_value ) . '%';
-ソース.
IN および NOT IN
IN
およびNOT IN
は、指定された配列に含まれる(または含まれない)一致を選択します.したがって、次のようなことができます.array( 'key' => 'color', 'value' => array('red', 'green', 'blue') 'compare' => 'IN' )
そして、色が赤、緑、または青に設定されているすべての投稿を取得します. 'NOT IN'を使用すると、逆になり、値が配列内のもの以外に設定されている投稿が表示されます.
このために生成されたSQLは次のようになります:
SELECT * FROM posts_meta WHERE value IN ("red", "green", "blue")
BETWEEN と NOT BETWEEN
BETWEEN
とNOT BETWEEN
を使用すると、正しい値の範囲を定義でき、meta_queryの配列に2つの値を指定する必要があります.array( 'key' => 'price', 'value' => array(20,30) 'compare' => 'BETWEEN' )
これにより、価格が20〜30のすべての投稿が表示されます.この人は日付のある例を掘り下げます.
存在しません
NOT EXISTS
は、見た目と同じです.メタ値が設定されていないか、null値に設定されています.そのクエリに必要なのは、キーと比較演算子だけです.array( 'key' => 'price', 'compare' => 'NOT EXISTS' )
この人は非クエリを実行する必要がありました既存のメタ値であり、他の人とうまく遊ぶためにそれらが必要でした.
これがお役に立てば幸いです!
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!
-
注: `meta_query`配列を使用している場合は、キーの前に`meta_`を付けないでください.`$ query->meta_key`、` $ query->meta_value`などを使用している場合でも、これらはプレフィックスを保持する必要があります.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
-
「IN」比較オプションの機能についての説明が見つからないようです.それがどのように機能するか考えていますか?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
-
@ジョー、「IN」と「NOTIN」について何も追加しなかった理由がわかりません.私はそれらの比較で答えを編集して更新しました.@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
-
これは素晴らしい答えですが、現在利用可能なオプションがいくつかあります-: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'、および 'RLIKE''EXISTS' , 'REGEXP', 'NOT REGEXP' and 'RLIKE'
- 0
- 2020-08-28
- noelmcg
-
- 2013-10-13
「LIKE」のmeta_compare値を使用する場合、WordPressは自動的にワイルドカード文字(%)をmeta_value文字列にラップすることに注意してください.したがって、「Pat%」の例では結果が返されない可能性があります.
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.
-
ハーブのどこかのドキュメントにそれについての情報はありますか?`%`を削除するために例を変更する必要がありますか?is there info about that in the docs somewhere Herb? Should the example change to remove the `%`?
- 0
- 2013-11-22
- Jen
-
それは、私が実際に今それをしたはずです、[ソース](https://core.trac.wordpress.org/browser/tags/3.8.1/src/wp-includes/meta.php#L841)を見て、それからハーブが正しいことが非常に明確になります.@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
meta_queryで比較に使用できる演算子がたくさんあることに気づきました. ただし、どの演算子を使用すればよいかよくわかりません.
=
やLIKE
演算子のように混乱します.各演算子が正確に何を意味し、どのような条件で使用する必要があるのか知りたいです.
ありがとう.