前言:
前人挖坑后人填,离职的兄弟留下的礼物,让兄弟们偶尔缅怀一下
刷题记录和刷题选择的答案,一对多关系,存储到了一张表里(刷题记录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 个分隔符之后的所有字符 |