使用MYSQL PHP搜索每个单词而不是完整的字符串

时间:2011-09-30 20:56:07

标签: php mysql string search

我的搜索允许用户在我的数据库中搜索游戏。唯一的问题是,如果用户在搜索中键入多个术语,只有当这些多个单词彼此相邻时才能获得命中。

示例:

搜索词= Call Duty Modern

result = none

但如果他们输入:

搜索词=使命召唤 - 或现代战争

结果=使命召唤现代战争1/2/3等。

这是我的mysql查询:

$query = "SELECT ID, title FROM games WHERE title LIKE '%{$title}%' AND platform = :platform LIMIT $startFrom,15";
        $statement = $dbG->prepare($query);
        $statement->bindValue(':platform', $platform);
        $statement->execute();
        $gamesLike = $statement->fetch(PDO::FETCH_ASSOC);

我知道我应该分解每个单词并搜索每个单词,但我担心它会耗尽我所有程序的速度......

是否有任何特定的MYSQL查询调整我可以用来实现我需要的结果?

任何建议都将不胜感激

感谢您的时间

1 个答案:

答案 0 :(得分:6)

全文搜索非常适合:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

它实际上将mysql转换为搜索引擎,您可以使用matchagainst来查找搜索字词在您匹配的列中显示的频率。它可以处理部分匹配,多个匹配,排除小/常用的单词以帮助提高性能,并允许搜索关键字/符号(如+some -search)将返回必须具有some但不能search的结果1}}。

此外,设置非常简单,因为默认情况下您需要的所有内容都可以使用。