2012-03-26 63 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

相關問題