假设Paul JD
和Paul
是同一个人,搜索的正确MySQL语句是什么,它将在搜索{时返回Paul
和Paul JD
{1}}或Paul
?
我的MySQL声明:
Paul JD
搜索$sql=mysql_query("SELECT * FROM people WHERE name Like '%$h%' LIMIT 0, 5");
时,此语句不会返回Paul
。
答案 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作为一个函数来实现。并用它来过滤你的结果。