我需要一些帮助...
我有 2 个表,一个包含用户徒手输入的描述字段,第二个表由 2 列组成,第一个是组名称,第二个是同义词列表。因此,举例来说,我在名为 A 的组中的同义词表中可能有三行,其中包含同义词“Leaflet”、“Brochure”、“Hand Bill”。
我需要做的是返回第一个表中的所有行,其中 ItemDescription 列包含查询变量的任何同义词(可能是“Leaflet”)。
因此,这应该为我提供长描述字段中任何位置包含“传单”、“小册子”或“手帐单”一词的所有行。
只有在 ItemDescription 字段仅包含正在查找的实际单词的情况下,我才能执行此操作,实际上,这是一个很长的冗长列,可能包含 50 或 60 个单词,其中任何一个都可能是搜索单词之一或它的任何同义词。
一如既往地感谢所有帮助。 谢谢。
最佳答案
您可能应该尝试使用 LIKE
或 RLIKE
来匹配描述列。在本例中,您想要匹配多个替代项,因此我将仅显示一个示例。
假设我们有一个包含同义词的表。请注意,我们已将单词本身添加为同义词:
+---------+-----------+
| 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/