mysql - 根据搜索字符串或其任何同义词选择行

标签 mysql

我需要一些帮助...

我有 2 个表,一个包含用户徒手输入的描述字段,第二个表由 2 列组成,第一个是组名称,第二个是同义词列表。因此,举例来说,我在名为 A 的组中的同义词表中可能有三行,其中包含同义词“Leaflet”、“Brochure”、“Hand Bill”。

我需要做的是返回第一个表中的所有行,其中 ItemDescription 列包含查询变量的任何同义词(可能是“Leaflet”)。

因此,这应该为我提供长描述字段中任何位置包含“传单”、“小册子”或“手帐单”一词的所有行。

只有在 ItemDescription 字段仅包含正在查找的实际单词的情况下,我才能执行此操作,实际上,这是一个很长的冗长列,可能包含 50 或 60 个单词,其中任何一个都可能是搜索单词之一或它的任何同义词。

一如既往地感谢所有帮助。 谢谢。

最佳答案

您可能应该尝试使用 LIKERLIKE 来匹配描述列。在本例中,您想要匹配多个替代项,因此我将仅显示一个示例。

假设我们有一个包含同义词的表。请注意,我们已将单词本身添加为同义词:

+---------+-----------+
| word    | synonym   |
+---------+-----------+
| leaflet | leaflet   |
| leaflet | brochure  |
| leaflet | hand bill |
| skin    | skin      |
| skin    | leather   |
| skin    | hide      |
+---------+-----------+

您没有提供示例表,因此我发明了一个名为 items 的表:

+---------+-------------------+-----------------------------------+
| item_id | brief             | description                       |
+---------+-------------------+-----------------------------------+
|       1 | Diamond           | This brochure is glossy and shiny |
|       2 | Halloween Special | A leaflet for the Halloween       |
|       3 | Pumpkin           | This is just a Halloween pumpkin  |
+---------+-------------------+-----------------------------------+

现在,我们假设您想要查找描述中包含“leaflet”同义词之一的所有行。以下查询完成这项工作:

SELECT * FROM items
 WHERE description RLIKE (
    SELECT
       CONCAT('.*(', GROUP_CONCAT(synonym SEPARATOR '|'), ').*')
      FROM synonyms
     WHERE word = 'leaflet'
     GROUP BY word
  );

内部选择创建一个与同义词之一匹配的正则表达式,外部选择将此正则表达式应用于 items 表的 description 列。

关于mysql - 根据搜索字符串或其任何同义词选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697031/

相关文章:

mysql - BeepBeep 和 ErlyDB 集成问题

mysql - 在远程磁盘上创建脚本轮换备份

Mysql 插入时字段不为空

mysql - 如何删除坏触发器

mysql - 在mysql查询中使用小于运算符陷入困境

mysql - INSERT INTO values (...) ON DUPLICATE KEY UPDATE 具有多个值

php - 尝试在 PHP 中组合数组中的值

php - 如何更新数据库中以逗号分隔的图像中的特定图像

c# - 发送一些数据到服务器并获取它

mysql - 动态地将行从一个表插入到另一表