查询字段存储逗号分隔的集合

通常我们存储标签的时候或者某个属性的时候会定义两张表

  1. 标签表
CREATE TABLE `pd_comment_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tagname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
  `level` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
  `isdel` smallint(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='标签表';
  1. 数据表
CREATE TABLE `pd_workers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tel` varchar(50) NOT NULL DEFAULT '' COMMENT '登录手机',
  `password` varchar(32) NOT NULL DEFAULT '' COMMENT '密码',
  `level` smallint(2) NOT NULL DEFAULT '1' COMMENT '排序',
  `login_time` varchar(25) DEFAULT NULL,
  `login_ip` varchar(20) DEFAULT NULL,
  `num` int(2) NOT NULL DEFAULT '0' COMMENT '登录失败次数',
  `err_time` int(20) DEFAULT '0' COMMENT '登录失败时间',
  `state` int(1) NOT NULL DEFAULT '0' COMMENT '是否禁用 0:否 1:是',
  `real_name` varchar(20) DEFAULT NULL COMMENT '真实姓名',
  `title` varchar(55) DEFAULT NULL COMMENT '职称',
  `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `tags` varchar(255) DEFAULT NULL COMMENT '标签',
  `isonline` tinyint(1) DEFAULT '0' COMMENT '是否在线 0:否 1:是',
  PRIMARY KEY (`id`),
  UNIQUE KEY `tel_index` (`tel`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COMMENT='员工表';

其中员工表的tags字段存储的形式为"1,14,2,3" 以逗号分隔的字符串,每个数字关联着标签表的id

现在我们需要查询所有带有标签ID为14的员工,则sql如下

select * from pd_workers where find_in_set('14',`tags`)

这样查询出来的所有记录都是这个字段包含14id的数据

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容