我有以下查询:
SELECT * FROM `user`
WHERE MATCH (user_login) AGAINST ('supriya*' IN BOOLEAN MODE)
输出以'supriya'
开头的所有记录
现在我想要一些能够找到以例如结尾的所有记录的东西。 'abc'
。
我知道*
无法预先填充,也无法正常工作,我搜索了很多但却找不到任何相关内容。
如果我给查询字符串priya
..,则应返回以priya
结尾的所有记录
我该怎么做?
答案 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'之类的东西(任何以好的结尾)。它可能会返回不相关的结果,例如goods
,goody
。
因此,请确保您了解自己在做什么以及需要什么。