大家好,最近改造公司的一个问卷调查系统,java做的。 有一个小功能代码比较乱,具体是这样的,当用户答完所有题目后,提交之前可以预览自己做的题,预览的时候可以修改选题。 如:答完之后选择 预览。在预览页面上显示该用户答过的所有题目:由于数据库设计的时候
问题表是一张表 A
答案选项表是一张表 B
答案表是一张表 C每个表都有外键 关联。现在的做法是根据A表的ID取数据库B表的选项。然后取C表用户选择的答案:如
问题序号为 1 的问题(A表中)(你的年龄?)
答案有
A 19
B 18
C 20
D 21
(A 19, B 18 ,C 20 ,D 21)存在B表中C 表中存用户选择的答案,如 B 18 。那么取C表的答案和B表的这个问题的所有选项循环比较,当比较到 B 18是,在页面展示的时候就把 这个选项的 checked 写为 true (就是HTML单选中的选中)。那么现在的问题是 每一道题都要循环,比如上面这一题,要一个循环比较才能选中B。多选实现思路一样。当一张问卷有 30 道选择题时 ,就要至少循环30次,才能选中答案。我总认为这个写代码的思路比较 屎。首先每次都去数据库中取数比较,数据库连接会增多。
第二 循环太多 效率比较低,虽然循环代码只写一个就行了,但是数据要跑30次。
第三,业务逻辑和页面展示没有分开。不好维护。
发此贴,只想和大家讨论一下,有没有别的设计思路或者办法,让效率更高,代码更优美。
不用具体实现,只要提供思路就行。 谢谢大家。
问题表是一张表 A
答案选项表是一张表 B
答案表是一张表 C每个表都有外键 关联。现在的做法是根据A表的ID取数据库B表的选项。然后取C表用户选择的答案:如
问题序号为 1 的问题(A表中)(你的年龄?)
答案有
A 19
B 18
C 20
D 21
(A 19, B 18 ,C 20 ,D 21)存在B表中C 表中存用户选择的答案,如 B 18 。那么取C表的答案和B表的这个问题的所有选项循环比较,当比较到 B 18是,在页面展示的时候就把 这个选项的 checked 写为 true (就是HTML单选中的选中)。那么现在的问题是 每一道题都要循环,比如上面这一题,要一个循环比较才能选中B。多选实现思路一样。当一张问卷有 30 道选择题时 ,就要至少循环30次,才能选中答案。我总认为这个写代码的思路比较 屎。首先每次都去数据库中取数比较,数据库连接会增多。
第二 循环太多 效率比较低,虽然循环代码只写一个就行了,但是数据要跑30次。
第三,业务逻辑和页面展示没有分开。不好维护。
发此贴,只想和大家讨论一下,有没有别的设计思路或者办法,让效率更高,代码更优美。
不用具体实现,只要提供思路就行。 谢谢大家。
2.用户预览不一定要读取数据库,既然是web系统,用户提交时,可以将用户答案信息放入本地cookie,如果使用ajax局部刷新,还可以使用javascript来存放数据
3那么取C表的答案和B表的这个问题的所有选项循环比较,当比较到 B 18是,在页面展示的时候就把 这个选项的 checked 写为 true (就是HTML单选中的选中)。
不会用数据库联接吗
A表(id,question)
B表(qId,select,selectContent)
C表(user,qId,select)
SQL select A.question,B.select,B.selectContent,C.user where C.user='userId' and C.qId=B.qId and c.qId=A.id
一次把这个用户的所有题目都取出
主题ID 题目ID 题目 题目序号 说明
答案列表: t_ID,ques_id,answer,a_sqe,a_.
主题ID 问题ID 问题答案列表, 答案列表顺序,说明。
答案表: t_ID,ques_id, staffno,answer_name,.
大概就是这个样子。每一份问卷可以通过t_ID关联起来。
现在的问题是,当用户答题后点击 预览是 。如何标示已经答题的选项。现在的做法属通过根据答案表的答案和答案列表的答案对比,之后将选中的checked设置为 true.我觉得这样设计有点屎。 第一,增加了数据库连接。
第二。循环语句多,影响效率。
第三,代码乱。
虽然可以勉强能用,但是这样的设计很屎,但是我也没有更好的思路,所以和大家商讨一下。