2014-09-30 117 views
0

我有一个表,说tblName具有字段和值高级搜索

| ID |  Name     | 

| 1 |  Technical University | 

| 2 |  XYZ Lab Ltd.   | 

现在我必须用下面的输入值匹配名称列:

1- tech univ 
2- tech universities 
3- xyz Labs 

我不是能够编写查询以从表中获取结果。 如果我匹配名称列与输入值科技大学科技大学然后查询应该从tblName响应结果集技术大学。

请建议。

谢谢先进。

+2

对不起,我真的不明白你需要什么。 – Leo 2014-09-30 08:32:59

+0

我有一个输入“技术大学”。我想将此输入值与表中的“名称”列匹配,并希望记录集具有Id 1; – 2014-09-30 09:47:31

回答

1

那么你可以做一件事地图名称不同的名称,如

ID I_ID NAME 
1  1  tech university 
2  1  tech uni 
3  1  tech univs 

所以这个表将是链接,搜索查询I_ID是在主表是指ID的外键。我想这可以解决你的问题,你可以为一个名字定义几个名字。

而且使用正则表达式,更高的效率,你必须建立一个自定义的功能,虽然REGEXP的GENRAL用法如下

SELECT id, name FROM tblName WHERE name REGEXP 'tech' 

请参考http://www.tutorialspoint.com/mysql/mysql-regexps.htm更多关于REGEXP

+0

@Pankaj Kumar:这对您有帮助吗? – 2014-09-30 08:59:55

+0

好主意,它会有所帮助,但是这个概念会增加地图数据的开销。我不想管理映射。 是否存在任何算法,结果会出现? – 2014-09-30 09:38:10

+0

是的,但直接的SQL查询将无法提供帮助。您可以尝试REGEXP,http://www.tutorialspoint.com/mysql/mysql-regexps.htm,但即使这样也无法完全解决您的所有问题。要么你必须映射数据或使用一些智能算法来找到匹配的单词。 – 2014-09-30 09:43:46

0

对于简单当你需要匹配字符串开头的情况下,你可以使用

select * from table where field LIKE 'Hello %' 

%符号是一个通配符。

但是对于您需要的示例,我会重新考虑一下您在mysql中放置的全文索引解决方案。

在MS SQL中,我们使用Levenstein Distance函数,您可以构建自己的函数并使用它扩展mysql。

下面是一些例子,但我不知道是否会工作

https://github.com/jmcejuela/Levenshtein-MySQL-UDF

https://github.com/jmcejuela/Levenshtein-MySQL-UDF/blob/master/levenshtein.c

发现一个,应该是纯粹的SQL

http://openquery.com.au/blog/levenshtein-mysql-stored-function

0

测试这一点,可能会帮助

SELECT * FROM tblNAME WHERE Name LIKE "%name%";