首先:我不能在我的标题中使用单词:question,所以我使用了form field。
与我讨论我的问题/解释我已经拥有的东西与我需要的东西:
我需要的是:从数据库中动态提取第一组问题然后回答然后基于第一组问题的答案的能力显示第二组问题,这些问题根据第一组的答案而变化问题(并根据第二组问题的答案,将显示不同的第3组)等等(级别的数量未设置且是动态/可以更改)。
我已经拥有的:一个带有类和SQL DB后端的C#ASP.NET Web应用程序。在表单上编程,它将一组问题组合在一起,并根据传递给表单的分组从数据库中提取动态问题(和可能的答案)(可能有许多不同的问题/答案组和表单根据该分组来处理问题并在屏幕上显示问题。它还会提取问题所需的表单字段类型(文本框,选择,复选框,广播等),并动态显示表单字段,如果需要,还可以选择select / checkbox / radio选项,还可以向表单添加验证。然后,当用户提交表单时,它会保存数据库的答案,并可以动态地检索回复者。
我还有能力/逻辑让问题具有父/子关系(动态没有父级/子级关系的设定级别)。
我需要的是:为了能够使用上面的逻辑/数据库结构,但显示一组问题问题,然后根据第一组问题的答案,更改显示的第二组问题。
我可以使用if / else和case语句轻松地对逻辑进行硬编码,但我需要这是动态的,我想从问题/答案中分离出逻辑/代码,这样我就可以轻松添加/删除/更新问题树没有更新任何代码只是数据。
Ex:所以问题1,2,3显示在第一个表格上。用户回答1:A,2:A,3:B。基于这些答案,显示问题4,5,9。如果他们回答1:B,2:A,3:C,则显示问题4,7,9。此外,一些问题的答案可能不会影响下一组被置换的答案。另外,我可能在数据库中存储了一个问题,该问题可以出现在一组问题的第1级,但是嵌套在第二组问题的第4级。所有这些都需要从数据库中动态提取。
我已经拥有了我需要的大部分代码/逻辑/功能,我只需要扩展我已经拥有的内容以允许我想拥有的这个附加/新功能集。
答案 0 :(得分:2)
对于一个非常复杂的问题,这可能是一个过于简单化的想法......
创建另一个类似于此
的表格SetLogic | NextQuestionSet
'1:A, 2:A, 3:B' | '4,5,9'
'1:B, 2:A, 3:C' | '4,7,9'
OR
SetLogic | QuestionId
'1:A, 2:A, 3:B' | 4
'1:A, 2:A, 3:B' | 5
'1:A, 2:A, 3:B' | 9
'1:B, 2:A, 3:C' | 4
'1:B, 2:A, 3:C' | 7
'1:B, 2:A, 3:C' | 9
创建一个发送@SetLogicIn的存储过程,从新表中选择接下来要问的问题。
如果你决定走向那个方向,那么这是一个用于分割表NextQuestionSet的函数
CREATE FUNCTION [dbo].[SplitForDelimiter]
(
@delimiter VARCHAR(10),
@input VARCHAR(1000)
)
RETURNS @tempTable TABLE(
data VARCHAR(100)
)
BEGIN
DECLARE @tempstr VARCHAR(1000)
SET @tempstr = @input
WHILE(charindex(@delimiter,@tempstr,0) > 0)
BEGIN
DECLARE @t VARCHAR(100)
SET @t = Substring(@tempstr,0,(charindex(@delimiter,@tempstr,0)))
INSERT into @tempTable (data) VALUES (@t)
SET @tempstr = Substring(@tempstr,charindex(@delimiter,@tempstr,0)+1,Len(@tempstr))
if(charindex(@delimiter,@tempstr,0) <=0)
BEGIN
INSERT into @tempTable (data) VALUES (@tempstr)
END
END