OR検索や括弧などを含む検索ワードを分割。組み込んで使います。
検索ワードからSQLに変換するサンプル
require 'searchphraseparser.php'; $search = 'ひろし すみれ -(ともぞう OR こたけ)'; $where = parseSearchQuery($search); echo 'SELECT * FROM mytable WHERE '.$where.';'; // 検索クエリの解析 function parseSearchQuery($search) { if (strlen($search)===0) return '1=1'; $tree = SearchPhraseParser::Parse($search); return parseSearchTree($tree); } // 検索ツリーの解析 function parseSearchTree($tree) { $params = array(); switch ($tree['type']) { case 'VALUE': $where = parseSearchWord($tree['value']); break; case 'AND': case 'OR': $where = ''; foreach ($tree['value'] as $subtree) { if (strlen($where)>0) $where .= $tree['type']; $subwhere = parseSearchTree($subtree); $where .= $subwhere; $params[] = $subparams; } break; case 'NOT': $where = parseSearchTree($tree['value'][0]); $where = 'NOT'.$where; break; default: $where = '1=0'; break; } return '('.$where.')'; } function parseSearchWord($word) { return 'title LIKE \'%'.addslashes($word).'%\''; }
改版履歴
1.1.0 |
| 2012/02/29 |
1.0.1 |
| 2012/01/11 |
1.0.0 |
| 2011/07/30 |