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

use*_*923 3 mysql match

我有以下查询:

SELECT * FROM `user` 
WHERE MATCH (user_login) AGAINST ('supriya*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

其中输出以'supriya'.开头的所有记录.
现在我想要一些能够找到以例如结尾的所有记录的东西'abc'.
我知道*不能预先添加它也不起作用我已经搜索了很多但是找不到任何关于这一点.

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

Gol*_*rol 11

匹配不适用于启动通配符,因此匹配*abc*将无效.你将不得不LIKE用来实现这个目标:

SELECT * FROM user WHERE user_login LIKE '%abc';
Run Code Online (Sandbox Code Playgroud)

然而,这将非常缓慢.

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

user_login user_login_rev
xyzabc     cbazyx
Run Code Online (Sandbox Code Playgroud)

然后,如果列被索引'%abc',您可以查找'cba%'哪个更快,而不是查找.如果你想搜索,你可以再次使用MATCH 'cba*'.您也必须反转搜索字符串.

  • 谢谢!!这听起来是一个很好的解决方法,但我必须在一个已经存在的数据库中实现它,该数据库非常大,并且反转所有现有数据将非常乏味。仍然需要考虑一些事情:) (2认同)
  • 请注意,如果要从字符串中间查找内容,反转字符串将无法帮助您.您不会使用正常索引键入"Blue%",也不会使用反转的内容反转"Blue%"来找到"Jimmy Blue Jones". (2认同)