MYSQLでAND,OR,NOT検索[PHP]






MYSQLでAND,OR,NOT検索を行うためのWHERE文を返す関数を書いた。引数$wordにgoogle検索のようなキーワードを入れる。(例:「ガンプラ ガンダム」「フィギュア -スケート」「猫 | ネコ」)

半角若しくは全角スペースで単語を分けるとする。単語の前に半角ハイフンを付け加えるとNOT文とし、「|」もしくは「or」でOR検索とする。「|」「or」も前後をスペースで一文字空けることとする。

function SearchWord($word){
  //条件無し対策として必ず真になるしかけ
  $where=”WHERE 1″;
  //全角空白を半角空白に変換
  $word=str_replace(“ ”, ” “,$word);
  //空白文字で検索ワードを分割
  $word_array=preg_split(“/[ ]+/”,$word,-1,PREG_SPLIT_NO_EMPTY);
  //ワードごとに検索条件を追加
  $or=false;
  foreach($word_array as $word_array_element){
    if($word_array_element==”|”||!strcasecmp($word_array_element,”or”)){
      $or=true;
      continue;
    }
  //notキーワード
  $not=substr($word_array_element,0,1)==’-‘;
  $wordelement=$not?’ NOT':'';
  $trimword=$not?substr($word_array_element,1,strlen($word_array_element)-1):$word_array_element;

  $andor=$or?’ OR':’ AND';
  $where .= $andor.” `”.カラム名.”`”.$wordelement.” LIKE ‘%{$trimword}%'”;

  $or=false;
  }

  return $where;
}

返り値はSQL文のWHERE部分のテキスト。



コメント

メールアドレスが公開されることはありません。