我如何在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语法),这需要针对匹配列的全文索引。 –