2012-03-15 71 views
1

所以我有一個人名的表。 我需要編寫一個查詢來選擇名稱與給定名稱最相似的人員。MySQL:選擇最相似的值?

例如:

SELECT * FROM people WHERE name='joen' 

「joen」犯規存在於表,所以它會返回約翰,它存在於表。

這是什麼MySQL命令?

回答

0

我不是這方面的專家,但是這是非同小可。 「相似」是否意味着它可能是一個或兩個字母,或者你的意思是「喬恩」應該與「喬納森」和「比爾」匹配「威廉」嗎?

如果是後者,您可能需要查找或構建將名稱/暱稱映射到彼此的表,然後對其進行搜索。

如果是拼寫錯誤,Levenshtein可能會提供幫助,但我不知道如何將它集成到SQL查詢中。

2

Levenshtein算法計算詞之間的 「距離」:Levenshtein MySQL function

您可以使用這樣的,如果你添加功能:

SELECT * FROM people WHERE levenshtein('joen', `name`) BETWEEN 0 AND 4; 
-1

like關鍵字可能會幫助你

SELECT * FROM people WHERE name LIKE 'jo%' 

選擇以「jo」開頭的用戶

如果您正在更改查詢的程序,您可以通過減少指定的 「名稱」中的字符來檢查「結果」,並使用新查詢重新查詢數據庫 。

SELECT * FROM people WHERE name LIKE 'jones%' 

SELECT * FROM people WHERE name LIKE 'jone%' 

SELECT * FROM people WHERE name LIKE 'jon%' 

SELECT * FROM people WHERE name LIKE 'jo%' 
+0

此查詢無意義。因爲您可以在'name'字段中搜索任何內容。 'substr'函數發送了很多查詢到mysql,像你的。這是不可接受的。 – 2014-09-19 08:00:08