MySQL:什么是LIKE的反向版本?

MySql中的LIKE运算符用于查找包含我们查询文本的行,例如:

select name from user where name like "%john%" 

这将返回John SmithPeter Johnson

如果我需要相反的东西 – 查找包含在查询文本中的行? 例如,我给它John Smith and Peter Johnson are best friends并希望它find我可以在这个string中find的所有名字。

怎么做?

以下是您可以实现所描述的方法:

 SELECT name FROM user WHERE 'John Smith and Peter Johnson are best friends' LIKE CONCAT('%', name, '%') 
 select name from users where instr('John Smith and Peter Johnson', name) > 0 

我宁愿使用这种方法,而不是:

 select * from users WHERE 'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%') 

因为如果name可能包含%_字符(例如name ='v%alue'),那么上面的查询仍然会错误地返回该logging。 另外请注意,如果您的列可能包含反斜杠和/或“ C转义字符 ”,那么他们也需要转义。 这一切都在MySQLstring比较函数中解释。 例如,下面的SQL将返回1:

 SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%'); 

单个反斜杠需要用\\\\转义,并且%字符被转义: \%

这是一个文本索引问题。 如果我做对了,你的任务是以自由forms的文本查找所有对人的引用,而与LIKE或NOT LIKE无关。

在一般forms中,您正在查找引用的数据库表充当一些文本索引algorithm的字典。 使用这个字典build立inputstring的索引,并希望你会得到一些匹配。