如何在sql中找到相似的单词?例如:
我有这些话 -
地狱,llo,hl,lh
我想找到匹配的字词"hello"
或"helloworld"
顺序将是大多数匹配的字母
我尝试用“LIKE”但它限制了结果
答案 0 :(得分:0)
尝试使用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,如果不匹配任何等,则为零。这不会限制您的结果,如{{1等等。
使用WHERE field_to_search LIKE '%hell%'
结构还可以为不同的搜索字词赋予不同的权重,例如如果匹配IF(LOCATE
你可能会给它4分,hell
可能会给它3.所以理论上它可以匹配llo
和hl
但不匹配lh
或{ {1}}并且仍然高于与前两个匹配的术语(如果你将底部两个加权到顶部等等)。
文档:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
答案 1 :(得分:0)
您可能会对fulltext indexes
感到幸运答案 2 :(得分:0)
我认为你正在寻找这样的东西:
SELECT words.*
FROM words
WHERE 'hello' LIKE CONCAT('%', word, '%')
ORDER BY
LENGTH(word) DESC
请参阅小提琴here。请注意,此查询不会非常快,因为它无法使用索引。