提前搜索数据库列

时间:2014-09-30 08:24:56

标签: mysql

我有一个表 tblName 有字段和值

| ID  |     Name                 |

| 1   |     Technical University |

| 2   |     XYZ Lab Ltd.         |

现在我必须将Name列与以下输入值匹配:

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

我无法编写查询以从表中获取结果。 如果我将Name列与输入值 tech univ tech university 匹配,那么查询应该从tblName响应结果集Technical University。

请建议。

先谢谢了。

3 个答案:

答案 0 :(得分:2)

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

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

因此,此表将是您的搜索查询的链接I_ID是一个外键,它引用主表中的ID。我想这可以解决您的问题,您可以为单个名称定义多个名称。

此外,使用正则表达式以提高效率,您必须为此开发自定义函数,尽管REGEXP的一般用法如下

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

有关REGEXP的更多信息,请参阅http://www.tutorialspoint.com/mysql/mysql-regexps.htm

答案 1 :(得分: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

答案 2 :(得分:0)

测试它可能会有所帮助

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