meta_queryでAND条件とOR条件を使いたい
-
meta_queryを使って、カスタムフィールドの値で絞り込みを行いたいと思っています。
その際、column1がaaaかつ、column_2がbbbまたはcolumn_3がcccという条件を書きたいのですが、可能でしょうか。以下だと、全てAND条件となってしまいます。
$args = array(
‘post_type’ => ‘custom_post’,
‘meta_query’ => array(
‘relation’ => ‘AND’,
array(
‘key’ => ‘column_1’,
‘value’ => ‘aaa’,
‘compare’ => ‘=’
array(
‘key’ => “column_2”,
‘value’ => “bbb”
‘compare’ => ‘=’
),
array(
‘key’ => “column_3”,
‘value’ => “ccc”
‘compare’ => ‘=’
)
)
);以下のようなことを、meta_queryを使って行いたいのですが、無理でしょうか。
SELECT * FROM table_a
WHERE column_1 = “aaa”
AND (column_2 = “bbb” OR column_3=”ccc”)
-
Daisuke Takahashi 様
ご回答ありがとうございます。
いろいろと試してみているのですが、なかなかうまくいきません。$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => "column_2,column_3", 'value' => "bbb" 'compare' => '=' ), array( 'key' => "column_3", 'value' => "bbb" 'compare' => '=' ) ) );
上記を、以下のように書き換えて試してみたのですが、結果が返ってきません。
$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => "column_2,column_3", 'value' => "bbb" 'compare' => '=' ) ) );
keyに配列を指定しなければ返ってくるのですが、何かお気づきの点などありますでしょうか。
$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => "column_2", 'value' => "bbb" 'compare' => '=' ) ) );
すいません、転記し間違えました。再度貼り付けます。
$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => "column_2,column_3", 'value' => "bbb" 'compare' => '=' ), array( 'key' => "column_3", 'value' => "bbb" 'compare' => '=' ) ) );
上記を、以下のように書き換えて試してみたのですが、
結果が返ってきません。$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => array("column_2","column_3"), 'value' => "bbb" 'compare' => '=' ) ) );
以下では返ってきます。
keyに配列を設定するとうまくいかないように見えるのですが
何かお気づきありますでしょうか。$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' array( 'key' => "column_2", 'value' => "bbb" 'compare' => '=' ) ) );
'relation' => 'OR'
を使わないんですか?Daisuke Takahashi さんが紹介なさったリンク先の回答 http://stackoverflow.com/a/18420154 で使われています。
gblsm様
ありがとうございます。
ORとANDを組み合わせた書き方で上手く行きました。
リンク先の、ORとANDを組み合わせた書き方は、コメントで動かないと書かれていたように読めたので、一番下の配列を使用したコードを使っていました。
最初から試しておけばよかったです。大変失礼しました。参考までに、以下で意図した結果が得られました。
$args = array( 'post_type' => 'custom_post', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'column_1', 'value' => 'aaa', 'compare' => '=' ), array( 'relation' => 'OR', array( 'key' => "column_2", 'value' => "bbb", 'compare' => '=' ), array( 'key' => "column_3", 'value' => "bbb", 'compare' => '=' ), ) ) );
- トピック「meta_queryでAND条件とOR条件を使いたい」には新たに返信することはできません。