gpt4 book ai didi

mysql - MySQL 中是否有 IN() 的 "inverse"函数?

转载 作者:行者123 更新时间:2023-11-29 08:05:53 24 4
gpt4 key购买 nike

场景是这样的:在表 A 中,我有一列“tags”,即 varchar(255)。在此列中,我存储数字,以逗号分隔,如下所示:

2,14,31,33,56

等等。可以没有、一个或多个。

我需要进行一个 SELECT 查询,该查询将返回此字段中具有特定数字的行。现在我正在使用这种方法(不要 panic ,我知道这是一个糟糕的方法..这就是我寻求帮助的原因!)。例如,假设我要检查的数字是 33。查询是:

SELECT * FROM table_a WHERE
tags LIKE "%,33,%" OR tags LIKE "33,%" OR tags LIKE "%,33" OR tags LIKE "33"

我不是专家,但我知道这不可能是方法。我想到的第一个问题是:是否有一个与 IN() 类似但工作方式相反的命令?

我的意思是,我可以告诉它“查找‘tags’包含值 33 的行”吗?

当问这个问题时,我可以看到除 varchar(255) 之外可能还有另一种字段类型来包含这种类型的数据(毕竟是数字数组)

有没有好的、有效的方法来做到这一点?我的方法适用于小表,是的,但是如果表增长..(例如,10k 行、50k、300k ...)这显然是一个问题。

最佳答案

您想要的函数是find_in_set():

SELECT *
FROM table_a
WHERE find_in_set(33, tags) > 0;

您可以将 like 语句简化为:

SELECT *
FROM table_a
WHERE concat(',', tags, ',') LIKE '%,33,%';

这些都不能使用索引。拥有一个单独的表,每个实体和每个标签一行是正确的方法(但我认为您已经知道这一点)。

关于mysql - MySQL 中是否有 IN() 的 "inverse"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com