人们对如何搜索同一个词有不同的想法。
例如Tri-Valley,Trivalley,Tri Valley(甚至可能是不正确的拼写)
目前,搜索工作就像这样
SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri valley%';
如果没有写出三个相似的陈述,是否有一种简单的方法可以说'空间冲刺或没有空间'?
似乎可以轻松完成:
SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri%valley%';
但是这只有在初始输入为'tri-valley'或'tri valley'时才有效。如果初始输入是'trivalley'我不知道在哪里放置%(理论上就是,实际上,我这样做,因为我们只关注十几个不同的学区,但我希望解决更大的问题)
答案 0 :(得分:3)
如果你有很多不正确的拼写,你可以考虑使用SOUNDEX或SOUNDS LIKE。如果你有很多行(或者即使你没有),最好将SOUNDEX
的输出存储在另一列中。
我还建议 - 为了准确性 - 引入一个单独的表格,其中包含学区的权威列表,并运行查询以查找那些不在该列表中的表格。
答案 1 :(得分:1)
MySQL有一个叫做Sounds的功能。
答案 2 :(得分:1)
如果可能的话,这里的另一种方法是将问题从搜索改为选择。如果您有一组学区产生一个下拉列表(或者如果列表很大,或者按县,那么按学区划分),并且允许您的用户输入自由格式文本来选择学区,而不是让您的用户输入自由格式文本用户选择合适的一个。使用它来“搜索”和数据输入以消除非规范条目。显然,这只有在您可以枚举所有条目时才有效。
或者,您可以允许用户选择包含或包含类型搜索的开头,并根据所选搜索类型生成相应的SQL('tri%'或'%tri%')。如果用户知道搜索类型是以或包含的搜索类型,则他们可能会调整搜索字符串,直到它产生所需的结果。
答案 3 :(得分:0)
你发布的第二个声明应该可以解决问题:
SELECT * FROM 'table' WHERE 'SchoolDistrict' LIKE '%tri%valley%';
在将搜索词传递给select语句之前,您应该做的是用%符号替换所有字符和空格。例如,
SearchTerm = SearchTerm.Replace(" ","%");