2011-05-30 78 views
0

我使用InnoDB表,我需要做內搜索...高效的MySQL搜索

讓說,我有一排

1. asda 
2. asdda 
3. xyz 

我想搜索ASDA ...

它會像SELECT * FROM table WHERE myC LIKE 'asda'那樣沒有效果...我想要做的是顯示'asda'和'asdda',因爲它幾乎是熟悉的......有沒有任何有效的方法來做到這一點? MATCH(myC)反對'asda'僅在myISAM表格類型中可用。

謝謝你的回答!

回答

1

一個非常基本的版本將使用SOUNDEX()功能在MySQL:

SELECT * 
FROM table 
WHERE SOUNDEX(myC) = SOUNDEX('asda'); 

,或者你可以考慮嘗試爲Levenshtein Distance,這將是一個有點萬無一失,但在計算上是昂貴得多。

+0

它在理論上... ...但我試過'...(UPPER(CONCAT_WS('',a.c1,a.c2,a.c3,c.cx,l.cy))聲音像' %PODSTAVEK%'...'並且它返回0行...但是在執行時:'...(UPPER(CONCAT_WS('',a.c1,a.c2,a.c3,c.cx,l。 cy))LIKE'%PODSTAVEK%'...'它返回12行...我能做什麼? – 2011-05-31 09:04:55

+0

你必須將等式兩邊轉換爲soundex代碼。如果你只做一邊,它是一個蘋果/橙子的情況。 – 2011-05-31 12:45:37

+0

發現!感謝您的幫助:) – 2011-06-02 08:42:19