MySQL搜索Paul和Paul JD的例子?

时间:2011-07-26 14:54:25

标签: mysql

假设Paul JDPaul是同一个人,搜索的正确MySQL语句是什么,它将在搜索{时返回PaulPaul JD {1}}或Paul

我的MySQL声明:

Paul JD

搜索$sql=mysql_query("SELECT * FROM people WHERE name Like '%$h%' LIMIT 0, 5"); 时,此语句不会返回Paul

3 个答案:

答案 0 :(得分:0)

你不应该搜索“Paul JD” - 你应该搜索“Paul”,它会找到“Paul”和“Paul JD”。请注意,“Paul JD”不是“Paul”的子串(但反之亦然)。

答案 1 :(得分:0)

您将不得不将传入的PAUL JD分成两个(由空格分隔),然后搜索。

$sql=mysql_query("SELECT * FROM people WHERE name Like '%$FirstWord%' OR name Like '%$SecondWord%' LIMIT 0, 5");

但是这很快就会变得艰难,因为你想要匹配保罗 JD PAUL JD

$sql=mysql_query("SELECT * FROM people WHERE name Like '%$FirstWord%' OR name Like '%$SecondWord% OR name Like '%$FirstWord%$SecondWord%' LIMIT 0, 5");

随着它变得越来越复杂,您可以创建一个临时表,将传入的字符串放入其中,并使用JOIN和匹配。

答案 2 :(得分:0)

要启用模糊式搜索,您需要在空白区域上拆分搜索参数,并根据其包含的参数数量动态构建查询字符串。

因此,对于'Paul JD'示例,您的查询字符串应如下所示:

$sql = mysql_query("SELECT * FROM people WHERE name Like '%$h1%' OR name like'%$h2%' LIMIT 0, 5");

当它执行时,它看起来像:

SELECT * FROM people WHERE name Like '%Paul%' OR name like'%JD%' LIMIT 0, 5

为了让您的模糊搜索更加灵活,您可以将Levenshtein Edit Distance algorithm作为一个函数来实现。并用它来过滤你的结果。