Soundex在这种情况下并不好用,因为不同的单词可能会给你相同的Soundex结果,因此会任意排序。这个问题的更好解决方案是Levenshein Edit Distance算法,你可以将其实现为数据库中的一个函数:链接到Levensheint impl. as MySql stored function!!!。 你也可以查看这个SO链接。它包含了该算法的Sql server (T-SQL-specific)实现,但应该可以进行移植。该算法的机制相当简单,只需要一个2D数组和对字符串的循环即可。
- Paul Sasik
5
我在研究Levenshtein算法,如果我需要在代码中进行排序的话。看起来在数据库中实现正确的算法或使用已经在代码端可用的相同算法是更加明智的选择。 - Tim Lytle
如果您将其实现为MySql函数(答案中的链接),那么您应该能够在SQL中执行它。类似这样:SELECT CityName,Leven(CityName,compString)FROM City ORDER BY Leven(CityName,compString) - Paul Sasik
@Rinzler:是的,这篇文章已经快两年了,链接可能已经失效。无论如何,我找到了另一个MySQL实现的例子并重新链接了。 - Paul Sasik
谢谢我的朋友,你能在Zend框架中找到一个soundex的实现吗? - Rinzler
@Rinzler:看看这个PHP手册页面,了解如何使用Levenshtein算法:http://php.net/manual/en/function.levenshtein.php。我不熟悉Zend,但你应该能够利用这个算法。 - Paul Sasik