サポート » 使い方全般 » meta_queryでAND条件とOR条件を使いたい

  • 解決済 riezo

    (@riezo)


    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”)

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター Daisuke Takahashi

    (@extendwings)

    トピック投稿者 riezo

    (@riezo)

    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' => '='
    		)
    	)
    );
    トピック投稿者 riezo

    (@riezo)

    すいません、転記し間違えました。再度貼り付けます。

    $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 で使われています。

    トピック投稿者 riezo

    (@riezo)

    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' => '='
    			),
    		)
    	)
    );
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「meta_queryでAND条件とOR条件を使いたい」には新たに返信することはできません。