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 |