SQL通过匹配查找类似的单词和顺序

时间:2013-11-21 21:08:10

标签: php mysql sql

如何在sql中找到相似的单词?例如:

我有这些话 -

  地狱,llo,hl,lh

我想找到匹配的字词"hello""helloworld"

顺序将是大多数匹配的字母

我尝试用“LIKE”但它限制了结果

3 个答案:

答案 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.所以理论上它可以匹配llohl但不匹配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。请注意,此查询不会非常快,因为它无法使用索引。