对于一个包含数组的列的MYSQL表,如何选择该列包含列表中所有元素的所有条目?

问题描述 投票:0回答:1

所以我有一个 MYSQL 表,其中一列(称为 TAGS)是一个数组,其中包含标签名称列表。例如,给定条目的 TAGS 列值为“TAG A、TAG B、TAG C”。

现在我想从表中选择具有 TAGS 列值的所有条目,其中包含给定数组中的所有标签名称。例如,我可能想要获取 TAGS 包含 TAG A、TAG B 和 TAG C 的所有条目。

现在我已经设置好了,它将返回带有 TAGS 列值的所有条目,其中包含完全相同的标签名称数组。但是,正如问题所述,我想返回带有 TAGS 列的所有条目,该列仅包含至少所有给定的标签名称,TAG 列可以包含其他标签名称,并且仍然会返回。

mysql select
1个回答
-1
投票

您可以使用MySQL的

FIND_IN_SET
功能。

当然,你可以使用

LIKE
。但如果您的标签以逗号分隔并且您想确保完全匹配,最好选择
FIND_IN_SET
。但是,它要求您的标签本身不包含逗号。

SELECT * FROM your_table
WHERE FIND_IN_SET('TAG A', TAGS) > 0
  AND FIND_IN_SET('TAG B', TAGS) > 0
  AND FIND_IN_SET('TAG C', TAGS) > 0;

如果标签列的值在逗号后包含空格,则需要使用

REPLACE
函数删除该空格。以下查询表明。

SELECT * FROM your_table
WHERE FIND_IN_SET('TAG A', REPLACE(TAGS, ' ', '')) > 0
  AND FIND_IN_SET('TAG B', REPLACE(TAGS, ' ', '')) > 0
  AND FIND_IN_SET('TAG C', REPLACE(TAGS, ' ', '')) > 0;

在您的编程语言中,您可以创建动态查询。这是 Node.js 代码。

tags = ["TAG A", "TAG B", "TAG C"]  // Example array of tags
sql = "SELECT * FROM TAGS WHERE "

conditions = []
for (let tag of tags) {
    condition = `FIND_IN_SET('${tag}', REPLACE(TAGS, ' ', '')) > 0`
    conditions.push(condition)
}
sql += conditions.join(" AND ") + ";"

您可以查看此链接如何使用

FIND_IN_SET
功能。

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.