2012-03-26 88 views
2

我有两个表称为参考和列表。两者都有两个字段:id和name。PHP MySql - SELECT where similar_text()> x

reference: 
ref_id, ref_name 
1, john 
2, georges 
etc... 

list: 
lst_id, lst_name 
1, steward 
2, james 
3, john 
4, jones 
5, georges 
etc... 

我想从两个表中选择名称,其中similar_text()> 60。这里输出下面我想有:

ref_name, lst_name, similar_text() 
john, john, 100 
john, jones, 67 
georges, georges, 100 

注意,管家和詹姆斯应该为similar_text冷落()低于60

希望有人可以提供帮助。提前感谢您的依赖。干杯。马克。哦,顺便说一下,我愿意通过更好的解决方案来实现我的目标......

+0

请澄清如何定义“similar_text()”。例如,约翰和琼斯给出了67.这个67是如何计算的? – 2012-03-26 11:15:06

+0

那是什么similar_text()函数? MySQL中有这样的一个吗? – 2012-03-26 11:18:07

+0

噢。 similar_text()是一个php函数,用于检索以百分比表示的两个字符串之间的匹配:http://php.net/manual/fr/function.similar-text.php – Marc 2012-03-26 11:18:26

回答

6

您很有可能需要levenshtein in mysql。这将允许您计算字符串的差异。

然后你可以这样做:

SELECT ref_name, lst_name, LEVENSHTEIN_RATIO(ref_name, lst_name) as textDiff 
FROM reference, list 
HAVING textDiff > 60; 

或类似的东西。

注意:当处理大型数据集时,这肯定会有性能问题。

+0

给我一秒来测试这个... Tks – Marc 2012-03-26 11:23:25

+0

谢谢,解决方案采用... – Marc 2012-03-26 11:39:15

1

要使用similar_text,您需要交叉连接两个表,获取结果数组并在结果数组中使用similar_text函数。 如果你这样做,你可以将结果保存在第三个辅助表中。

但是,您可以使用MySQL的本机功能SOUNDEX(),哪个可以工作,或者可以使用create a Levehnstein function