所以我有一個人名的表。 我需要編寫一個查詢來選擇名稱與給定名稱最相似的人員。MySQL:選擇最相似的值?
例如:
SELECT * FROM people WHERE name='joen'
「joen」犯規存在於表,所以它會返回約翰,它存在於表。
這是什麼MySQL命令?
所以我有一個人名的表。 我需要編寫一個查詢來選擇名稱與給定名稱最相似的人員。MySQL:選擇最相似的值?
例如:
SELECT * FROM people WHERE name='joen'
「joen」犯規存在於表,所以它會返回約翰,它存在於表。
這是什麼MySQL命令?
你可能會尋找SOUNDEX
和SOUNDS_LIKE
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
我不是這方面的專家,但是這是非同小可。 「相似」是否意味着它可能是一個或兩個字母,或者你的意思是「喬恩」應該與「喬納森」和「比爾」匹配「威廉」嗎?
如果是後者,您可能需要查找或構建將名稱/暱稱映射到彼此的表,然後對其進行搜索。
如果是拼寫錯誤,Levenshtein可能會提供幫助,但我不知道如何將它集成到SQL查詢中。
Levenshtein算法計算詞之間的 「距離」:Levenshtein MySQL function
您可以使用這樣的,如果你添加功能:
SELECT * FROM people WHERE levenshtein('joen', `name`) BETWEEN 0 AND 4;
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%'
此查詢無意義。因爲您可以在'name'字段中搜索任何內容。 'substr'函數發送了很多查詢到mysql,像你的。這是不可接受的。 – 2014-09-19 08:00:08
聽起來像我所需要的。謝謝。 – user1091856 2012-03-15 01:44:13