【发布时间】:2021-10-13 21:40:11
【问题描述】:
我有一个表PriceList,它有一个VARCHAR 列tags,我在其中存储了一个逗号分隔的值列表。
价目表的一个例子是:
| ID | name | tags |
|---|---|---|
| 1 | Price list 1 | tag1,tag2 |
| 2 | Price list 2 | tag3,tag4 |
我现在想要的是通过标签列表(逗号分隔值)查询此表。如果查询中存在所有标签,则应仅选择 priceList。 我在查询中传递的标签可能比 PriceList 的标签列中定义的标签更多。
例如:
SELECT * FROM PriceList WHERE 'tag2,tag1,tag7' IN/FIND_IN_SET??? (tags)
在此示例中,我希望检索 PriceList ID1,因为它的 所有标签都包含在 'tag2,tag1,tag7' 值中。
我没有在 Mysql 中找到任何有用的功能来完成我需要做的事情。我知道这不是最好的设计,这是可以接受的,因为 PriceList 表真的很小(5/10 项)。
我想到的唯一想法是存储按字母顺序排序的标签,并查看 PriceList 的标签列是否是我的标签列表的子字符串。 你怎么看?你有什么提示吗?
【问题讨论】:
-
在为时已晚之前修复您的规范化。那么这将是一个微不足道的查询
-
@Randy 我明白你的意思,我同意你的观点,但为了完整起见,我想看看这个问题是否有解决方案。
-
你使用的是什么 MySQL 版本?
-
@FaNo_FN 我正在使用 RDS Aurora 2.10 (Mysq 5.7)
标签: mysql