2017-06-17 26 views
0

我想查找表中具有特定列数据的给定字符串中的所有行。在字符串中查找表的数据

比方说,我有一个名称表。

+----------+------------------+ 
| id  |  name  | 
+----------+------------------+ 
| 1  |  John Do | 
+----------+------------------+ 
| 2  | Douglas Rutledge | 
+----------+------------------+ 
| 3  | Herman Kelly | 
+----------+------------------+ 

对于给定的字符串:“我是在与道格拉斯·拉特利奇党” 我想要得到的结果是:

+----------+------------------+ 
| id  |  name  | 
+----------+------------------+ 
| 2  | Douglas Rutledge | 
+----------+------------------+ 

或为字符串:“我刚认识约翰·Do和赫尔曼·凯利“ 我想要得到的结果:

+----------+------------------+ 
| id  |  name  | 
+----------+------------------+ 
| 1  |  John Do | 
+----------+------------------+ 
| 3  | Herman Kelly | 
+----------+------------------+ 

我想象的查询可能看起来像谁:SELECT * FROM MY_TABLE WHERE my_table.name包含在 ”my_string“

+0

你试过'LIKE'吗? – Ravi

+0

@Ravi我编辑了我的问题,你能给我一个例子吗? – Ethrak

+0

你将会遇到困难。你将需要解析整个字符串,并以某种方式识别名字。如果你只接受一个直接的名字,那将会容易得多。例如。 '约翰,赫尔曼凯利,威尔史密斯',而不是像'我真的很喜欢下面的演员,比如约翰等等''。如果你这样做,你将能够使用LIKE操作符。 – SandPiper

回答

0

您可以使用诸如例如用于Do

select * from my_table 
where name like '%Do%'; 

反向,你可以尝试使用

select * from my_table 
where "I was in a party with Douglas Rutledge" like concat('%,name, '%'); 
+0

问题是我不知道我得到的字符串中是否有名字。 我需要找到一种方法来做相反的事情,并检查数据库的每一行是否都有一个名称在该字符串中。不是相反的 – Ethrak

+0

您的评论对我没有意义..更新您的问题和适当的数据示例和预期的结果。 – scaisEdge

+0

用几个例子编辑,thx为您的帮助 – Ethrak

0

您可以使用全文搜索用于这一目的。

为了使用全文搜索,您必须创建列的FULLTEXT索引。要做到这一点,你可以使用这个查询。

ALTER TABLE <table_name> ADD FULLTEXT <index_name>(<column_names>);

一次全文索引创建你可以查询这样的事情。

select 
    id, name 
from 
    <table_name> 
where 
    match(<column_name>) against ('<string>') 

为:“我刚刚遇到了John Do和Herman Kelly”。结果将是:

+----------+------------------+ 
| id  |  name  | 
+----------+------------------+ 
| 1  |  John Do | 
+----------+------------------+ 
| 3  | Herman Kelly | 
+----------+------------------+ 

更多信息:https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html#function_match

MySQL有全文索引和搜索支持:

MySQL中的全文索引类型FULLTEXT的索引。

全文索引只能用于InnoDB或MyISAM表,并且只能为CHAR,VARCHAR或TEXT列创建。

对于大型数据集,将数据加载到没有FULLTEXT索引的表中然后再创建索引比将数据加载到具有现有FULLTEXT索引的表快得多。

希望这可以帮助

+0

可以做到这一点,但如果我有两个不同的人有相同的名字,让我们说:“约翰做”和“约翰木匠”。 他们都将返回字符串:“我刚刚遇到约翰做和赫尔曼凯利” 如果有人的名字是“只是做”,他也会出现 – Ethrak