MySQL:进行基本搜索

3
我在我的数据库中有一个名称表,我希望对其进行模糊搜索,例如我的数据库包含:
Name         ID
John Smith   1
Edward Smith 2
Gabriel Gray 3
Paul Roberts 4

目前我在使用 Python 搜索数据库时,只能进行精确匹配搜索。但是我想要能够进行模糊搜索,例如:我可以搜索名字为 "smith" 的人,并找到 John Smith 和 Edward Smith。

1
你只需要忽略大小写吗?或者你实际上需要返回类似字符串的匹配项(例如:搜索smiht会返回John Smith和Edward Smith)? - quantumSoup
返回相似的字符串,因此需要区分大小写。 - Jim
1
由于“模糊搜索”通常意味着这个:http://en.wikipedia.org/wiki/Approximate_string_matching - Jochen Ritzel
好的,那么我要用什么术语来描述我的问题呢? - Jim
2个回答

5

最简单的形式是使用LIKE比较:

SELECT * FROM table WHERE name LIKE '%smith%';

使用FULLTEXT索引(大量文本)可以进行更详细的搜索,SOUNDEX()(适用于英语单词,在其他语言上匹配的效果从“可行”到“糟糕不堪”),单词的levenshtein距离等。


2
此外,如果您选择适当的排序规则(具有_ci后缀的排序规则),则可以在MySQL中使用不区分大小写的比较。 - quantumSoup
谢谢,最简单的形式就是我要找的。 - Jim

0
import MySQLdb
search_str = 'smith'
conn = MySQLdb.connect(host="localhost", user="me",passwd="pw",db="mydb")
c = conn.cursor()
c.execute("SELECT name FROM mytable WHERE name LIKE %s", '%' + search_str + '%')
c.fetchall()
c.close()
conn.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接