我的搜索允许用户在我的数据库中搜索游戏。唯一的问题是,如果用户在搜索中键入多个术语,只有当这些多个单词彼此相邻时才能获得命中。
示例:
搜索词= 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查询调整我可以用来实现我需要的结果?
任何建议都将不胜感激
感谢您的时间
答案 0 :(得分:6)
全文搜索非常适合:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
它实际上将mysql转换为搜索引擎,您可以使用match
和against
来查找搜索字词在您匹配的列中显示的频率。它可以处理部分匹配,多个匹配,排除小/常用的单词以帮助提高性能,并允许搜索关键字/符号(如+some -search
)将返回必须具有some
但不能search
的结果1}}。
此外,设置非常简单,因为默认情况下您需要的所有内容都可以使用。