【mysql系】mysql数据库表字段逗号分割正则匹配多个值
现在表字段有个name字段值为多个分别用逗号隔开,现需要实现如果前端通过页面选择其中几个值,怎么获取对应的查询结果呢?思考了下,这样的条件不就是看字段的值 是否正则匹配传入的字段不就可以实现这样的效果嘛!如果查询条件传入李四,张三那么就需要查询出来id为1和2的记录。于是,我这边根据思路,整理了下完整的sql语句,并贴出了对应查询结果。如果传入张三,那么就需要查询出来记录id为1的记录。如果查询条
·
现在表字段有个name字段值为多个分别用逗号隔开,现需要实现如果前端通过页面选择其中几个值,怎么通过sql实现获取查询结果呢?
这里为了测试这种效果,先创建一个测试表
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `test` VALUES (1, '张三,李四,王五');
INSERT INTO `test` VALUES (2, '李四,王五');
INSERT INTO `test` VALUES (3, '王五');
现在需要实现:
如果查询条件传入李四,张三 那么就需要查询出来id为1和2的记录。
如果查询条件传入王五,就需要全部查询出来。
如果传入张三,那么就需要查询出来记录id为1的记录。
思考了下,这样的条件不就是看字段的值 是否正则匹配传入的字段 不就可以实现这样的效果嘛!
于是,通过搜索引擎查到了这样的语法
select concat('3333,2222', ',') regexp concat(replace('33331,55155',',',',|'),',');
于是,我这边根据思路,整理了下完整的sql语句,并贴出了对应查询结果
SELECT
*
FROM
test
WHERE
concat( '李四,张三', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

SELECT
*
FROM
test
WHERE
concat( '张三', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

SELECT
*
FROM
test
WHERE
concat( '王五', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

这样子,就实现了我们想要的效果
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)