在字符串中查找表的数据

时间:2017-06-17 17:41:22

标签: mysql sql database row contain

我想查找表中包含特定列数据的所有行。

假设我有一张名字表。

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

对于给定的字符串:“我和Douglas Rutledge参加了一个聚会” 我想得到结果:

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

或者是字符串:“我刚见过John Do和Herman Kelly” 我想得到结果:

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

我想象一个看起来像这样的查询:SELECT * FROM my_table WHERE my_table.name包含在“my_string”中

2 个答案:

答案 0 :(得分: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, '%');

答案 1 :(得分:0)

您可以使用全文搜索来实现此目的。

要使用全文搜索,您必须创建列的FULLTEXT索引。为此,您可以使用此查询。

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

创建全文索引后,您可以查询类似的内容。

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

代表:&#34;我刚见过John Do和Herman Kelly&#34;。结果将是:

 +----------+------------------+ 
 | 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索引的表中。

希望这会有所帮助