先说需求
每天下发一道题,如果用户今天答了题,那么当天只下发今天答的那道题
如果用户今天没答题(标记为题目1),那么明天也下发这道题目1
当用户答了6道题以上,需要告诉用户他在所有用户中的排名
当所有题目都答完了,需要告诉用户展示一个答完了所有题目的界面
这种情况下我们要设计三张表:
一张是用户操作的表,记录用户都答了哪道题 ,表1
uid,question_id,sort(表示题目的排列顺序),answer,option
一张是题目表,所有的题目都这里,表2
Question_id,title,option
一张是记录用户最后答哪道,表3
Uid,question_id,sort,correct_count,total_count,is_correct
我们要提供三个API
第一个API是下发今日的题目:
获取今日题目,我们从表3中把这个uid中的sort找到
判断时间,如果是最后答题的是今天,那么就继续下发这道题,type=1
如果答题不是今天,那么就要下发新题,去表2中找到sort+1的那倒下发
第二个API是获取答题历史
从表1中查找uid有多少条数据,查到了就下发
第三个API用户答了一道题,返回给用户告诉他正不正确,还有下发排名
这个情况我们去查表2,看这道题的答案正不正确,然后去表3中去查出排名发给用户
表的sql:
CREATE TABLE `pregnancy_two`.`PregExamineQuestion` (
`id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`title` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '问题标题',
`options` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '问题选项JSON',
`answer` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '1' COMMENT '问题答案序号',
`knowledge_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '知识ID',
`explain` VARCHAR ( 512 ) COLLATE latin1_bin NOT NULL DEFAULT '' COMMENT '解释',
`sort` INT ( 10 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '题目展示顺序ASC',
`status` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '状态:0-正常状态、1-删除状态',
`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',
`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',
PRIMARY KEY ( `id` ),
KEY `IDX_status_sort` ( `status`, `sort` )
) ENGINE = INNODB DEFAULT CHARSET = latin1 COLLATE = latin1_bin COMMENT = '每日备孕小测试题目表';
CREATE TABLE `pregnancy_two`.`PregExamineUser` (
`user_id` INT ( 11 ) UNSIGNED NOT NULL COMMENT '用户ID',
`correct` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '正确作答总数',
`total` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '作答中总数',
`percent` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '作答正确率',
`question_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最近一次作答题目ID',
`last_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最近一次作答时间',
`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',
`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',
PRIMARY KEY ( `user_id` ),
KEY `IDX_percent_total_ts` ( `percent`, `total`, `update_ts` )
) ENGINE = INNODB DEFAULT CHARSET = latin1 COMMENT = '每日备孕小测试用户表';
CREATE TABLE `pregnancy_two`.`PregExamineDetail` (
`user_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '用户ID',
`question_id` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '题目ID',
`option` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '1' COMMENT '选择的答案(序号)',
`is_correct` TINYINT ( 3 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否正确:0-错误、1-正确',
`create_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间戳',
`update_ts` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间戳',
PRIMARY KEY ( `user_id`, `question_id` )
) ENGINE = INNODB DEFAULT CHARSET = latin1 COMMENT = '每日备孕小测试明细表';