mysql数据库竖表转换为横表并新建表

       问题描述:数据库中存在大量竖表(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)通过代码截取字符得到地域信息,并更新数据表


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值