通常我们存储标签的时候或者某个属性的时候会定义两张表
- 标签表
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='标签表';
- 数据表
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的数据