问题描述:数据库中存在大量竖表(key-value形式),导致数据库查询速度偏慢,所以将竖表转换为横表。并且新表的内容需要结合多个旧表中的内容(数据库为mysql)。
1竖表转横表
type_name为key值所在的字段名,value为value值所在字段的字段名
create table dpl_info
select p.dpl_id as id,cardID,p.DeviceID,Name,dpl_result.`value` as basic_info,null as created_at from
(select dpl_id,
MAX(case when type_name='PatientID' THEN value END) as cardID,
0 as DeviceID,
MAX(case when type_name='Name' THEN value END) as Name,
from dpl_patient
GROUP BY dpl_id) as p,dpl_result,device_dpl
where p.dpl_id=dpl_result.dpl_id and dpl_result.type=0 and p.dpl_id=device_dpl.id
2表结构字段修改
其中有空缺的字段通过转换表后增加,当然也可以在转表的过程中直接增加字段
3表新数据补充
其中新增了一个地域字段来标记地域信息,之前是通过默认用户名12个字段中的第三至第四字符来标记的,通过后台代码连接数据库修改:
(1)遍历查询新表dpl_info的信息
(2)通过字段对应到之前的用户信息表,获取到用户名字段
(3)通过代码截取字符得到地域信息,并更新数据表