我如何在sql中找到類似的單詞?例如:SQL查找類似的單詞和通過匹配的順序
我有那些話 -
地獄,激光剝離,HL,LH
我要找到匹配的詞來"hello"
或"helloworld"
而且訂貨會被大多數匹配的字母
我試着用「LIKE」做,但它限制了結果
我如何在sql中找到類似的單詞?例如:SQL查找類似的單詞和通過匹配的順序
我有那些話 -
地獄,激光剝離,HL,LH
我要找到匹配的詞來"hello"
或"helloworld"
而且訂貨會被大多數匹配的字母
我試着用「LIKE」做,但它限制了結果
嘗試使用LOCATE
函數,該函數在發現大海撈針時返回第一個字符位置。你可以這樣做,對於每個條款與IF > 0 THEN...
:
SELECT * FROM tablename
ORDER BY
(
IF(LOCATE('hell', field_to_search) > 0, 1, 0)
+ IF(LOCATE('llo', field_to_search) > 0, 1, 0)
+ IF(LOCATE('hl', field_to_search) > 0, 1, 0)
+ IF(LOCATE('lh', field_to_search) > 0, 1, 0)
) DESC
如果field_to_search
包含(不區分大小寫的情況下),所有四個方面,它將在外地的順序有4個,和零,如果它不匹配任何等等。這不會限制你的結果,如WHERE field_to_search LIKE '%hell%'
等
使用IF(LOCATE
結構還可以讓你給不同的權重不同的搜索詞,例如如果它匹配hell
,你可能會給它4分,可能會給它3.因此,理論上它可以匹配hl
和lh
,但不是hell
或,並且仍然會出現在與前兩個匹配的項之上(如果您將最低的兩個比頂等)。
文檔:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
你可能有一些運氣fulltext indexes
我認爲你正在尋找的東西是這樣的:
SELECT words.*
FROM words
WHERE 'hello' LIKE CONCAT('%', word, '%')
ORDER BY
LENGTH(word) DESC
請參閱小提琴here。請注意,這個查詢不會很快,因爲它不能使用索引。
鏈接是好的(這是全文搜索),但這裏的描述是非常有限的。 YOu可能需要使用全文搜索功能('MATCH ... AGAINST ... 1語法),這需要針對匹配列的全文索引。 –