如何使用匹配的'* abc'前缀通配符

时间:2011-10-21 10:57:01

标签: mysql match

我有以下查询:

SELECT * FROM `user` 
WHERE MATCH (user_login) AGAINST ('supriya*' IN BOOLEAN MODE)

输出以'supriya'开头的所有记录 现在我想要一些能够找到以例如结尾的所有记录的东西。 'abc'
我知道*无法预先填充,也无法正常工作,我搜索了很多但却找不到任何相关内容。

如果我给查询字符串priya ..,则应返回以priya结尾的所有记录 我该怎么做?

2 个答案:

答案 0 :(得分:11)

匹配不适用于启动通配符,因此与*abc*匹配将无效。您必须使用LIKE来实现此目的:

SELECT * FROM user WHERE user_login LIKE '%abc';

然而,这将非常缓慢。

如果你真的需要匹配字符串的结尾,并且你必须经常这样做,而性能正在杀死你,一个解决方案是创建一个单独的列,你可以在其中反转字符串,所以你得到:

user_login user_login_rev
xyzabc     cbazyx

然后,您可以查找'%abc',而不是查找'cba%',如果列已编入索引,则速度会快得多。如果您想搜索'cba*',可以再次使用MATCH。您也只需要反转搜索字符串。

答案 1 :(得分:0)

我认为FULL-TEXT Searching的选择与此无关。如果您有兴趣根据以下通配符搜索某些字段:

  • %word%(字符串中的任意位置)
  • word%(以字开头)
  • %word(以单词结尾)

最好的选择是使用GolezTrol提到的LIKE子句。

但是,如果您对基于高级/文本的搜索感兴趣,可以选择FULL-TEXT搜索。

LIKE的限制:

此条款有一些限制。让我们假设你使用'%good'之类的东西(任何以好的结尾)。它可能会返回不相关的结果,例如goodsgoody

因此,请确保您了解自己在做什么以及需要什么。