2014-09-30 280 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%";