Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:什么是LIKE的反向版本?_Sql_Mysql - Fatal编程技术网

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

MySQL:什么是LIKE的反向版本?,sql,mysql,Sql,Mysql,MySql中的LIKE运算符用于查找包含查询文本的行,例如: select name from user where name like "%john%" 它将返回John Smith,Peter Johnson等 如果我需要相反的方法——查找包含在查询文本中的行,该怎么办?例如,我给它约翰·史密斯和彼得·约翰逊是最好的朋友,希望它能从表中找到这个字符串中可以找到的所有名字 如何做到这一点?这是一个文本索引问题。如果我没弄错的话,你的任务就是在一个自由格式的文本中找到所有对人的引用,而与喜欢或

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

select name from user where name like "%john%"
它将返回
John Smith
Peter Johnson

如果我需要相反的方法——查找包含在查询文本中的行,该怎么办?例如,我给它
约翰·史密斯和彼得·约翰逊是最好的朋友
,希望它能从表中找到这个字符串中可以找到的所有名字


如何做到这一点?

这是一个文本索引问题。如果我没弄错的话,你的任务就是在一个自由格式的文本中找到所有对人的引用,而与喜欢或不喜欢无关


在一般形式中,您要查找引用的数据库表充当某些文本索引算法的字典。使用此词典在输入字符串上建立索引,希望您能找到一些匹配项。

以下是一种实现您所描述内容的方法:

SELECT name FROM user 
WHERE 'John Smith and Peter Johnson are best friends' LIKE
  CONCAT('%', name, '%')
我宁愿使用这种方法,而不是:

select *
from users
WHERE  'John Smith and Peter Johnson' LIKE CONCAT('%', name ,'%')
因为如果
名称
可能包含
%
字符(例如name='v%value'),那么上述查询仍然会错误地返回该记录。还要注意,如果列可能包含反斜杠和/或“”,那么它们也需要转义。这些都在本文中进行了解释。例如,下面的SQL将返回1:

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

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

我也被这个问题弄糊涂了。在我脑海中,使用一个合适的全文搜索引擎,例如Sphinx或Solr/Lucene,怎么样?我想这里需要的是这样一个“从用户名中选择姓名”(搜索字符串)“John Smith和Peter Johnson是最好的朋友”。输出应为Johnm Smith、Peter Johnson等,前提是他们的名字。基本上是反向全文搜索.Dheer。哦这似乎对乔尔有用。
SELECT 'val\%ue' LIKE CONCAT('%', 'al\\\\\%u' ,'%');