2009-01-29 33 views
2

人们对如何搜索同一个术语有不同的看法。在Mysql中搜索相似的字符串

例如三谷,Trivalley,三谷(甚至可能是不正确的拼写)

目前,搜索是这样

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri valley%'; 

做的是有一个简单的办法说“空间破折号或没有空间“没有写出三个类似的陈述?

这似乎是它可以很容易做到:

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri%valley%'; 

但这仅仅在进行初始输入是“trivalley”或“三山谷”如果最初的输入为“trivalley”我没有想法在哪里放置的%(理论上,实际上,我这样做,因为我们只看十几个不同的学区,但我期望解决更大的问题)

回答

3

你可以考虑使用SOUNDEX,或SOUNDS LIKE如果你有很多不正确的拼写。如果你有很多行(或者甚至没有),那么将SOUNDEX的输出存储在附加列中可能是明智的。

我也建议 - 为了准确性 - 引入一个单独的表和一个权威的学区列表,并运行一个查询来查找那些不在该列表中的查询。

+0

“为了准确性的考虑,我还建议引入一个带有权威学区列表的单独表格,并运行查询以查找那些不在该列表中的单元格。” 这是90%的问题,我给他们一个文本框,而不是一个下拉输入,现在数据库被搞砸了 – 2009-01-29 14:32:10

1

MySQL有一个名为Sounds like的函数。

link text

0

您发布应该做的伎俩第二个语句:

SELECT * FROM 'table' WHERE 'SchoolDistrict' LIKE '%tri%valley%'; 

您通过搜索项的select语句之前,你应该做的是用%来代替所有字符和空格标志。例如,

SearchTerm = SearchTerm.Replace(" ","%"); 
1

这里的一个替代方法是重新搜索从搜索到选择的问题,如果可能的话。不要让用户输入自由形式的文本来选择学区,如果您有一组学区会生成一个下拉列表(如果列表很大,例如县,那么按学区)就会生成一个下拉列表,并允许用户选择合适的一个。将其用于“搜索”和数据输入以消除非规范条目。显然这只有在你枚举所有条目时才有效。

或者,您可以允许用户选择开始或包含类型搜索,并根据所选搜索类型简单地生成适当的SQL('tri%'或'%tri%')。如果用户了解搜索类型是以“开始”还是“包含”开头,那么他们可能会调整搜索字符串,直到获得他们需要的结果。