C# 困难随机

C# 困难随机,c#,asp.net,sql-server,random,C#,Asp.net,Sql Server,Random,如何(甚至在逻辑上)随机至少一个,例如,来自具有指定列值的数据库的Id 我的意思是,我在数据库表id、问题id、答案文本值和bool(如果答案正确)列中有三个答案id,其中(至少)一个是正确的 非常感谢你的建议 看一下,这样做几分贝 SELECT TOP 3 id FROM yourtable WHERE isCorrect = 1 ORDER BY NEWID() 看一下,这样做几分贝 SELECT TOP 3 id FROM yourtable WHERE isCorrect = 1 OR

如何(甚至在逻辑上)随机至少一个,例如,来自具有指定列值的数据库的Id

我的意思是,我在数据库表id、问题id、答案文本值和bool(如果答案正确)列中有三个答案id,其中(至少)一个是正确的

非常感谢你的建议

看一下,这样做几分贝

SELECT TOP 3 id FROM yourtable WHERE isCorrect = 1 ORDER BY NEWID()
看一下,这样做几分贝

SELECT TOP 3 id FROM yourtable WHERE isCorrect = 1 ORDER BY NEWID()

所以你想做一个选择题,在y中显示x,在y中,c是正确的,w是错误的(c+w=y)

我建议使用2个查询,首先随机得到正确答案,然后得到x-1错误答案。我建议不要使用两个或两个以上的正确答案,因为这只会让用户感到困惑

要获得正确答案,您可以执行以下操作:

SELECT TOP 1 ID 
FROM Answers 
WHERE QuestionID =@QuestionID -- parameter supplied from code
  AND IsCorrect = 1 
ORDER BY NEWID()
那之后呢

SELECT TOP 3 ID  -- assuming the X = 4 value is hardcoded in the application
FROM Answers 
WHERE QuestionID =@QuestionID -- parameter supplied from code
  AND IsCorrect = 0
ORDER BY NEWID()
如果您确实希望包含任何其他答案,包括正确答案,您可以这样做

SELECT TOP 3 ID
FROM Answers 
WHERE QuestionID = @QuestionID
  AND ID != @ID -- where ID is the ID of the question from the first query
ORDER BY NEWID()

由于这些问题的答案集不会很大(我想不会超过10或20个),因此在每行使用NEWID()对性能不会有太大影响。

因此,您需要进行多项选择,并显示y中的x个答案,其中y中的c是正确的,w是错误的(c+w=y)

我建议使用2个查询,首先随机得到正确答案,然后得到x-1错误答案。我建议不要使用两个或两个以上的正确答案,因为这只会让用户感到困惑

要获得正确答案,您可以执行以下操作:

SELECT TOP 1 ID 
FROM Answers 
WHERE QuestionID =@QuestionID -- parameter supplied from code
  AND IsCorrect = 1 
ORDER BY NEWID()
那之后呢

SELECT TOP 3 ID  -- assuming the X = 4 value is hardcoded in the application
FROM Answers 
WHERE QuestionID =@QuestionID -- parameter supplied from code
  AND IsCorrect = 0
ORDER BY NEWID()
如果您确实希望包含任何其他答案,包括正确答案,您可以这样做

SELECT TOP 3 ID
FROM Answers 
WHERE QuestionID = @QuestionID
  AND ID != @ID -- where ID is the ID of the question from the first query
ORDER BY NEWID()


由于这些问题的答案集不会很大(我想不会超过10或20个),因此在每行使用NEWID()对性能不会有太大影响。

您使用的是哪种RDBMS?能否指定如何在应用程序中访问数据库?给出一些如何检索数据的代码,例如,选择一个问题,即MS SQL。但是我想知道怎么做,我不需要任何代码。我知道我必须检查这个问题有多少正确答案。然后我需要随机显示多少正确答案。我想知道如何将这些正确答案与不正确答案混合在一起这应该适用于指定的问题,或者x答案是否适用于完全不相关的问题?您使用的是哪种RDBMS?您可以指定如何在应用程序中访问数据库吗?给出一些如何检索数据的代码,例如,选择一个问题,即MS SQL。但是我想知道怎么做,我不需要任何代码。我知道我必须检查这个问题有多少正确答案。然后我需要随机显示多少正确答案。我想知道如何将这些正确答案与不正确答案混合起来这应该适用于一个特定的问题,或者x答案可以适用于完全不相关的问题吗?而且对于更大的数据集来说,会有糟糕的性能-它会将所有行合并并排序。更好的方法是:将所有ID放入内存中的一个数组中,然后在这些ID的索引上获得一个随机值-如果在调用之间缓存该数组,则速度会快得多。这是一个以随机顺序选择恰好3个正确答案的代码。我说得对吗?我需要别的东西。例如,随机化5个问题,每个问题随机化3个答案,其中随机数(但至少一个)为correct@TomTom我喜欢你的回答,非常感谢。但是还有其他更简单的方法吗?好的。您能提供准确的表格结构吗?@TomTom“…前三名…其中isCorrect=1”不能只选择正确的答案???你确定吗?而且对于更大的数据集来说,它的性能会非常糟糕——它已经将所有行合并并排序了。更好的方法是:将所有ID放入内存中的一个数组中,然后在这些ID的索引上获得一个随机值-如果在调用之间缓存该数组,则速度会快得多。这是一个以随机顺序选择恰好3个正确答案的代码。我说得对吗?我需要别的东西。例如,随机化5个问题,每个问题随机化3个答案,其中随机数(但至少一个)为correct@TomTom我喜欢你的回答,非常感谢。但是还有其他更简单的方法吗?好的。您能提供准确的表格结构吗?@TomTom“…前三名…其中isCorrect=1”不能只选择正确的答案???你确定?