2011-05-30 47 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