从列中搜索逗号分隔的值,其中包含逗号分隔的字符串mysql

时间:2019-06-18 17:08:03

标签: mysql

我正在尝试从包含逗号分隔字符串的数据库表列中搜索逗号分隔值。

MY DB

id    interest    status
------------------------
1      1,2,3        1
2        4          1

我的搜索组合包含1,23,231,4等。任何组合都会发生。

我想显示所有id,其中包含逗号分隔的搜索组合中的任何数字。

例如,搜索1,4应该返回

id
--
1
2

例如,搜索3,2应该返回

id
--
1

我尝试使用INFIND_IN_SET,但都没有达到我的结果。还有其他选择吗?

SELECT * FROM `tbl_test` WHERE interest IN (3)

上面的代码返回空集。

1 个答案:

答案 0 :(得分:1)

就像Jens在评论中指出的那样,强烈建议您强烈规范化您的架构。

如果您希望继续使用字符串和逗号分隔的值,则应查看 复杂的正则表达式匹配 (我留给您研究)。 / p>

不过,另一种替代方法是将列interest转换为 JSON 数据类型。 MYSQL 5.7 及更高版本支持这些数据类型。

CREATE TABLE IF NOT EXISTS `tbl` (
  `id` int(6) unsigned NOT NULL,
  `interest`  JSON DEFAULT NULL,
  `status` int(1) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO `tbl` (`id`, `interest`,`status`) VALUES
  (1, '[1,2,3,4]',1),
  (2, '[1,2]',1),
  (3, '[3]',1);

然后查询如下:

select id from tbl where JSON_CONTAINS( interest ,'[1,2]')
select id from tbl where JSON_CONTAINS( interest ,'[3,4]');
...

您可以在this sql fiddle.

中看到它的操作