【问题标题】:Find data of table in string在字符串中查找表的数据
【发布时间】:2017-11-20 07:28:18
【问题描述】:

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

假设我有一个名称表。

+----------+------------------+
| 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 IS CONTAINED IN "my_string"

【问题讨论】:

  • 你试过LIKE 吗?
  • @Ravi 我已经编辑了我的问题,你能给我一个例子吗?
  • 你会很难接受的。您将需要解析整个字符串并以某种方式识别其中的名称。如果您只接受直接名称,这将容易得多。例如。 John Do, Herman Kelly, Will Smith 而不是 I really like the following actors, such as John Do, etc... 之类的东西。如果这样做,您将能够使用 LIKE 运算符。

标签: mysql sql database row contain


【解决方案1】:

您可以使用like,例如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, '%');

【讨论】:

  • 问题是我不知道我得到的字符串中是否有名字。我需要找到一种相反的方法,并检查数据库的每一行是否有一个在字符串中的名称。不是相反
  • 你的评论对我没有意义..更新你的问题和适当的数据样本和预期的结果..
  • 答案更新了一个建议......希望有用
【解决方案2】:

您可以为此目的使用全文搜索。

为了使用全文搜索,您必须创建列的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 索引的表中要快得多。

希望对你有帮助

【讨论】:

  • 本可以做到,但如果我有 2 个不同的人同名,我们就说:“John Do”和“John Carpenter”。它们都将返回字符串:“I just meet John Do and Herman Kelly”如果某人的名字是“Just Do”,他也会出现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多