这个问题在这里已经有答案了:
在数据库列中存储分隔列表真的那么糟糕吗(10个答案)两年前关门了。我有这个表,想选择正好包含“22”的行。
id field 1 22 2 22,24,78 3 1,22,347 4 2,21,22 5 22,222
选择上面的行,而不是下面的行。
6 222 7 21,23 8 220,322
ebdffaop1#
从where字段中选择*如“%22%”;
x8diyxa72#
这个 REGEXP 接线员在这里很方便:
REGEXP
SELECT * FROM yourTable WHERE field REGEXP '[[:<:]]22[[:>:]]';
我们也可以尝试使用 FIND_IN_SET :
FIND_IN_SET
SELECT * FROM yourTable WHERE FIND_IN_SET('22', field) > 0;
如果其他方法都失败了,我们可以使用 LIKE ,但它需要稍微重一些:
LIKE
SELECT * FROM yourTable WHERE CONCAT(',', field, ',') LIKE '%,22,%';
但一般来说,在数据库表中存储csv(逗号分隔值)是不好的做法。最好每个都储存起来 field 单独行上的值,例如,使用:
field
id field 1 22 2 22 2 24 2 78 ...
2条答案
按热度按时间ebdffaop1#
从where字段中选择*如“%22%”;
x8diyxa72#
这个
REGEXP
接线员在这里很方便:我们也可以尝试使用
FIND_IN_SET
:如果其他方法都失败了,我们可以使用
LIKE
,但它需要稍微重一些:但一般来说,在数据库表中存储csv(逗号分隔值)是不好的做法。最好每个都储存起来
field
单独行上的值,例如,使用: