现在表字段有个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, ',', ',|' ), ',' );

 这样子,就实现了我们想要的效果

Logo

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

更多推荐