mysql按逗号拆分为多行

前言:

前人挖坑后人填,离职的兄弟留下的礼物,让兄弟们偶尔缅怀一下
刷题记录和刷题选择的答案,一对多关系,存储到了一张表里(刷题记录ID - 红色为用户选择的答案ID)
现在产品需求,要按试题选项进行统计,看到这个数据结构心里是挣扎的…

出现这种情况大多都是属于偷懒的心态了…所以一个打算离职的员工,是会给你留下许多惊喜的…
套用一句话:只要代码不是我来维护,开发起来速度杠杠的…
在这里插入图片描述

解决方案:

1、为客观题(选择题)创建关系表进行存储,刷题记录ID - 选择的答案ID
2、数据迁移SQL脚本准备
这里主要记录下SQL脚本,以后可能还能直接抄…

  • 单选题数据迁移
INSERT into gas_question_brush_record_answer (brush_record_id, answer_id) 
SELECT r.id, SUBSTRING(r.answer_value FROM 2 FOR (char_length(r.answer_value) - 2)) from gas_question_brush_record r where r.answer_value not like '%,%';
  • 多选题数据迁移
INSERT into gas_question_brush_record_answer (brush_record_id, answer_id) 
SELECT
	r.id,	
	SUBSTRING_INDEX( SUBSTRING_INDEX( 
											REPLACE(REPLACE(r.answer_value, '[', ''), ']',''), ',', h.help_topic_id + 1 )
										, ',',- 1 ) AS answer_value 
FROM
	gas_question_brush_record r
	JOIN mysql.help_topic h ON h.help_topic_id < ( ( length( REPLACE(REPLACE(r.answer_value, '[', ''), ']','') ) - length( REPLACE ( REPLACE(REPLACE(r.answer_value, '[', ''), ']',''), ',', '' ) ) + 1 ) )
where r.answer_value like '%,%';

这里着重介绍下字符串拆分函数:
SUBSTRING_INDEX(str, delim, count)

参数名解释
str需要拆分的字符串
delim分隔符,通过某字符进行拆分
count当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值