web-dev-qa-db-ja.com

Meta_query比較演算子の説明

私はmeta_queryで比較のために使用できる演算子がたくさんあることに気づきました。しかし、どの演算子を使用すればよいのかよくわかりません。=演算子とLIKE演算子のように混乱しています。

それぞれの演算子が正確に何を意味するのか、そしてどのような条件でそれらを使用すべきかを知りたいのです。

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

ありがとう。

35
dev-jim

最初のいくつかはあなたが期待するようなものです。

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

LIKENOT LIKEは、ワイルドカード記号を追加できるSQL演算子です。したがって、次のようなメタクエリを持つことができます。

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

これは、メタ値 "name"が文字列 "Pat"を持つすべての投稿を返します。この場合、 "Pat"、 "Patricia"、 "Patrick"はすべてあなたに返されます。 WordPress以外のチュートリアルの説明 here があります。

ワイルドカード文字%を追加する必要はありません。@Herbが彼の下の answer で言ったようにデフォルトで追加されるからです。このように:$meta_value = '%' . like_escape( $meta_value ) . '%'; - source を見てください。

INNOT 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はまるでそれが聞こえるものと同じです - メタ値は設定されないか、またはnull値に設定されます。そのクエリに必要なのは、キーと比較演算子だけです。

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

この人 は存在しないメタ値を問い合わせる必要があり、他の人たちと素敵に遊ぶためにそれらを必要としていました。

お役に立てれば!

48
guiniveretoo

Meta_compareの値を 'LIKE'にすると、WordPressは自動的にmeta_value文字列をワイルドカード文字(%)で囲みます。そのため、 'Pat%'の例では結果が返されない可能性があります。

8
bobbingwide