サポート » 使い方全般 » meta_queryを使った絞り込みについて

  • 解決済 saki-saki

    (@saki-saki)


    いつもお世話になっております。

    今回は、meta_queryについて、ご質問がございます。

    meta_queryの絞り込み条件にて、valueの値は配列で挿入することが可能だとしりました。
    配列で指定する場合は、compareを’IN’に設定すると思われますが、
    自分が予想していた動きとは微妙に違ったので、ご質問させてください。

    疑問とは、compareの’LIKE’と’IN’の違いは、
    ‘LIKE’は値で指定した文字列に一致する。
    ‘IN’は値(配列)で指定した何れかに一致する。
    と調べた所わかりました。

    ただ、’LIKE’は曖昧検索で’IN’は完全一致の様な動作に思えます。

    ■記事条件
    1記事目 登録Name 山田
    2記事目 登録Name 太郎
    3記事目 登録Name 山田太郎

    ■例(LIKEの場合)
    カスタムフィールド名:name
    
    'meta_query' => array(
    	array(
    		'key' => 'name',
    		'value' => '山田',
    		'compare' => 'LIKE'
    	)
    )
    

    ↓絞り込み結果↓
    1記事目 山田
    3記事目 山田太郎`

    ■例(INの場合)
    $data = ["山田","太郎"]
    'meta_query' => array(
    	array(
    		'key' => 'name',
    		'value' => $data,
    		'compare' => 'IN'
    	)
    )

    ↓絞り込み結果↓
    1件目 山田
    2件目 太郎

    ■知りたいこと
    ‘LIKE’の場合は、3記事目の山田太郎も引掛っているものに対して
    ‘IN’の場合は、3記事目の山田太郎が引っかかりませんでした。

    
    'value' => 
    array (size=2)
    0 => string '山田' (length=6)
    1 => string '太郎' (length=6)
    

    配列もちゃんとできているようで、なぜこの様なバラバラな結果になってしまうのでしょうか?
    ‘LIKE’は曖昧検索で、’IN’は完全一致検索なのでしょうか。

    また、’IN’を使った場合の曖昧検索は可能でしょうか。
    ご教授いただけたら幸いです。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    正しい動作かと思います。

    ‘IN’ を使った場合の曖昧検索は可能でしょうか。

    IN ではできません。OR で複数指定するといいかと思います。
    ただし、meta_query で OR を複数指定すると極端に遅くなる可能性があります。

    条件が多い場合は、正規表現 (REGEXP) を使用するといいかもしれません。
    https://dev.mysql.com/doc/refman/5.6/ja/regexp.html

    'value' => '山田|太郎',
    'compare' => 'REGEXP',

    条件が極端に多い場合やマルチバイトセーフで行いたい場合は、SQL で記述することになりそうです。

    トピック投稿者 saki-saki

    (@saki-saki)

    ishitaka様

    いつもご回答いただきありがとうございます。
    ご教授していただいた、’compare’ => ‘REGEXP’,で無事に曖昧検索が可能となりました。
    REGEXPというものを初めて知り、勉強になります。

    条件が多いため、REGEXPを採用させていただきました。
    勉強になりました。ありがとうございました。

    また、この流れで聞いて大変申し訳ないのですが、
    ‘key’の値に配列または複数を入れることはできないのでしょうか。
    試したところ、Warning: trim() expects parameter 1 to be string・・・p-meta-query.php on line 564
    とErrorが出てしまい、文字列のみ対応のようですが
    こちらはquery.phpの方を改修しなければいけないのでしょうか。

    差し支え無ければ教えてください。

    key に配列を指定することはできません。OR で複数指定するといいかと思います。

    • この返信は5年、 4ヶ月前にishitakaが編集しました。
    トピック投稿者 saki-saki

    (@saki-saki)

    ishitaka様

    ご回答ありがとうございます。
    やはり配列指定はできない仕様なのですね。

    本件をご教授していただき、ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「meta_queryを使った絞り込みについて」には新たに返信することはできません。