SRe*_*eca 1 php mysql search symbols sql-like
我的问题是在搜索查询中使用符号。我希望用户能够使用符号而不会出现问题,但是 mysql 中的 LIKE 函数似乎不是解决方案,所以我需要一些帮助。
示例:如果有人搜索“Blue's car”并且“Blues car”在数据库中,则此查询将返回 0 个结果。或者反之亦然,如果有人搜索“Blues car”并且“Blue's car”在数据库中,则此查询也将返回 0 个结果。
这是我当前正在使用的示例:
("SELECT Title FROM MyData WHERE Title LIKE '%".$search."%'")
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以提供更好的搜索结果吗?
谢谢。
搜索栏
您可以有一个额外的“搜索”字段,用于存储不带标点符号的标题,并且当用户输入搜索字符串时,在应用查询之前删除标点符号。您还可以删除前导“The”。
我将进一步解释上述内容。
在数据库中你有这样的记录。SearchTitle 是删除了前导“The”并标点符号的标题:
Title SearchTitle
------------------------------------------
The Blue's Clues Blues Clues
Run Code Online (Sandbox Code Playgroud)
在这里,用户知道确切的标题并输入以下搜索字符串:
The Blue's Clues
Run Code Online (Sandbox Code Playgroud)
去掉开头的“The”和标点符号,得到以下结果:
Blues Clues
Run Code Online (Sandbox Code Playgroud)
您的查询如下所示
SELECT Title FROM MyData WHERE SearchTitle LIKE '%Blues Clues%'
Run Code Online (Sandbox Code Playgroud)
在这里,用户不知道确切的标题并输入以下内容:
Blues Clues
Run Code Online (Sandbox Code Playgroud)
去掉开头的“The”和标点符号,仍然会产生相同的结果:
Blues Clues
Run Code Online (Sandbox Code Playgroud)
您的查询保持不变,并与搜索字段中的内容匹配:
SELECT Title FROM MyData WHERE SearchTitle LIKE '%Blues Clues%'
Run Code Online (Sandbox Code Playgroud)
这一点还可以进一步改进。关键是对搜索字符串应用与搜索字段中存储的内容相同的规则。例如,将“two”和“II”转换为“2”等,删除“ON”和“AND”等其他单词。
全文搜索
MySQL 全文搜索使用“自然语言”搜索。我不确定这是否适合您的情况,但可能值得研究。