如何在MySQL中以任何顺序搜索单词?

时间:2014-10-02 23:32:21

标签: mysql sql

如何找到以任何顺序与搜索词匹配的行?

如果搜索是“1234”

匹配发现像“1234”,“4321”,“2314”,“3412”

但不包括“12345”,“123”,“2214”

=============================================== =========================

正如克里斯提到的,我认为使用LEN(table.search)很有帮助。 搜索词可以是任何东西,预期结果(我希望得到)应该是相同数量的字符,但每个字符可以是任何顺序。

例如,如果搜索词是“abc1dx”,则 结果可以包括“abc1dx”,“1abcdx”,“xd1abc”,“dxabc1”。
但是不应该包括像“abc1dx1”,“aac1dx”这样的词语

1 个答案:

答案 0 :(得分:1)

一种选择是必须拥有包含所有这些排列的WHERE子句。

例如

SELECT * FROM table WHERE 
    table.search='1234' OR 
    table.search='4321' OR 
    table.search='1423' ... 
    etc

正如你所看到的,你将会有一个相当大的查询;事实上,随着搜索词长度的增长,它会大得多。 这是一种不好的方式。

另一个选项可能是查询以查找带有LIKE查询的任何字符的结果以及长度匹配的位置:

SELECT * from table WHERE
    table.search LIKE '%1%' AND
    table.search LIKE '%2%' AND
    table.search LIKE '%3%' AND
    table.search LIKE '%4%' AND
    LEN(table.search) = 4

这是更好的,只要您的搜索字词中没有任何重复值(如“12321”)就可以了 - 它会遇到问题。

正如评论中指出的那样,你可能最好只做一个更通用的查询并使用不同的技术来获得匹配。