SearchPhraseParser

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
  • 大文字と小文字を区別するオプションをつけたよ!

1.1.0ダウンロード

2012/02/29
1.0.1
  • コメントとサンプルを微修正したよ!
  • 本体は何も変わってないよ!

1.0.1ダウンロード

2012/01/11
1.0.0
  • 公開したよ!

1.0.0ダウンロード

2011/07/30