阿里网站建设方案书,关于江西建设监督网网站迁移,wordpress一键还原,电子商务网站建设与实例心得问题
有时候我们表里会存在某个字符(例如经常用到的,)分割的分割的数据#xff0c;但是在使用的时候要将存在字符分割数据拆分#xff0c;我们一般的做法先从数据库中将数据查询出#xff0c;在内存中通过字符串分割函数split进行处理#xff0c;不会在sql中通过函数进行拆…问题
有时候我们表里会存在某个字符(例如经常用到的,)分割的分割的数据但是在使用的时候要将存在字符分割数据拆分我们一般的做法先从数据库中将数据查询出在内存中通过字符串分割函数split进行处理不会在sql中通过函数进行拆分这也符合阿里的规范但是如果我们是出报表通过其他平台写sql的方式进行拆分展示不经过内存字符串分割这时候我们只能通过sql 函数substring_index来处理下面介绍2种方式
解决方案
创建表
create table tb_staff_position_info
(id varchar(255) not null comment 主键primary key,created_at timestamp default CURRENT_TIMESTAMP not null comment 记录创建时间,updated_at timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment 记录修改时间,staff_name varchar(64) default not null comment 员工名称,position_name varchar(64) default not null comment 多个职位以,号分割,)comment 员工职位表 charset utf8;
初始化数据
insert into tb_staff_position_info(staff_name,position_name)values
(小平,技术组长,产品经理,项目经理),(小花,程序员,测试员,),(小广‘,研发总监)
预期查询
查询员工所属的职位多个职位显示多行
整体思路
1、将position_name 以,号进行拆分使用mysql 的substring_index(clunm,拆分字符,第几个n) 函数substring_index函数每次只能获取一个职位
2、借助临时表从0开始自增数据中最多有多少个分割字符临时表就有多少条数据
方案一
借助mysql 的自增表如下
select info.staff_name,substring_index(substring_index(info.position_name ,,,b.n 1),, ,- 1) AS position_namefrom tb_staff_position_info infojoin mysql.help_topic b
on b.help_topic_id ( length(info.position_name ) - length(REPLACE (info.position_name , ,, )) 1 ) 临时表借助于mysql的help_topic 表中的 help_topic_id来实现
方案二
有时候查询用户的权限无法访问mysql的表那么我们也可以创建一个临时表替换如下所示
select info.staff_name,substring_index(substring_index(info.position_name ,,,b.n 1),, ,- 1) AS position_namefrom tb_staff_position_info infojoin (select 0 as nunion all select 1 as nunion all select 2 as n) b on b.n ( length(info.position_name ) - length(REPLACE (info.position_name , ,, )) 1 )
上述创建的临时表b 最多能匹配 3个分割符如果存在大于3个那么在将数据插入到临时表即可
方案三
临时表变成正式表在数据库中创建一张自增表
总结
上述方式各有千秋下面总结优缺点
优缺点
方法一
优点临时表借助mysql 内置的help_topic 表无需自己创建临时表
缺点存在查询账号权限的限制有的账号是无法访问mysql内置表
方法二
优点创建自增的临时表不存在权限的限制
缺点如果分割符存在多个就要插入多条数据写法上没有方法一整洁优雅