Meta_query比較演算子の説明


37

meta_queryで比較に使用できる演算子がたくさんあることに気付きました。しかし、私は私が使用すべきかをオペレータはかなりわからない、それは何らかの形のように混乱している=LIKEオペレータ。

各演算子の正確な意味と、それらを使用する条件を知りたいです。

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

ありがとう。

回答:


50

あなたが期待するような最初のいくつかの作業:

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

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、与えられた配列にある(またはない)マッチを選択します。したがって、次のようなことができます。

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あなたが正しいかもしれない値の範囲を定義し、あなたのmeta_queryで配列内の2つの値を与えるためにあなたを必要とすることができます:

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

これにより、価格が20〜30のすべての投稿が表示されます。この人は、日付のある例を掘り下げます。

NOT EXISTSメタデータは設定されていないか、ヌル値に設定されています。そのクエリに必要なのは、キーと比較演算子だけです。

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

この人は、存在しないメタ値を照会する必要があり、他の人とうまくやるために必要でした。

お役に立てれば!


注:meta_query配列を使用している場合、キーの先頭にを付けないでくださいmeta_。あなたが使用している場合$query->meta_key$query->meta_valueなど、これらはまだ接頭辞を保持しなければなりません。
ショーン

「IN」比較オプションの機能に関する説明が見つからないようです。それがどのように機能するか考えていますか?
ジョー

1
@ジョー、「IN」と「NOT IN」について何も追加しなかった理由がわかりません。これらの比較で回答を編集および更新しました。
ジェン

7

「LIKE」のmeta_compare値を使用する場合、WordPressはmeta_value文字列をワイルドカード文字(%)で自動的にラップします。そのため、「Pat%」の例では結果が返されない可能性があります。


ハーブのどこかにドキュメントに関する情報がありますか?を削除するようにサンプルを変更する必要があり%ますか?
ジェン

ソースを見て、実際にそれを実際にやったら、ハーブが正しいことが非常に明確になります。@guiniveretoo
ニコライ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.