我提供了一个标签列表和一个带有名为 tags
的字段的表格。标签作为一个字符串组合存储。在串联之前,在每个标签的开头添加一个hashtag。
示例:
标签列表:{'summer', 'winter', 'autumn', 'spring'}
表中存储的字符串:'#summer#winter#autumn#spring'
现在给定一个标签列表,我如何查询在其 tags
字符串中至少包含这些给定标签之一的条目?有没有什么具体的功能或单行指令来实现这一点?
我目前正在获取该表中包含的所有数据集,在我的应用程序中为每个数据集创建对象,然后根据给定的标签列表查询这些对象。这是非常不方便和低效的,因为该表中有大约 500.000 个数据集。并且总是查询所有这些数据集会花费太多时间。 用于接收包含至少一个给定标签的所有数据集的 SQL 查询可能如下所示:
SELECT *
FROM table
WHERE tag_string LIKE '%tag1%' OR tag_string LIKE '%tag2%' OR tag_string LIKE '%tag3%' OR LIKE....
但这也是低效的,尤其是对于大量给定的标签。
我可以遍历每个标签并检查带有 LOCATE
的子字符串吗?或者有什么更有效的方法?
我正在使用 MariaDB 服务器版本 10.3.21。