Mysql 查询 LIKE 搜索并使用带符号的字符串

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)

还有其他方法可以提供更好的搜索结果吗?

谢谢。

Mar*_*ams 5

搜索栏

您可以有一个额外的“搜索”字段,用于存储不带标点符号的标题,并且当用户输入搜索字符串时,在应用查询之前删除标点符号。您还可以删除前导“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 全文搜索使用“自然语言”搜索。我不确定这是否适合您的情况,但可能值得研究。