【问题标题】:Difficult Random困难随机
【发布时间】:2013-01-06 12:48:41
【问题描述】:

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

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

非常感谢您的建议!

【问题讨论】:

  • 您使用的是哪个 RDBMS?
  • 您能否指定您在应用程序中访问数据库的方式?给出一些关于如何检索数据以选择的代码,例如一个问题。
  • 这是 MS SQL。但我想知道怎么做,我不需要任何代码。
  • 我知道我必须检查问题有多少正确答案。然后我需要随机显示多少正确答案。我想知道如何将这些正确答案与错误答案混合在一起
  • 这应该适用于指定的问题,或者 x 答案是否可以用于完全不相关的问题?

标签: c# asp.net sql-server random


【解决方案1】:

this为几个DB做。

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

【讨论】:

  • 对于更大的数据集,它的性能会很糟糕——它无法获取所有行并对其进行排序。更好:将所有 ID 拉入内存中的数组,然后随机获取这些 id 的索引 - 如果在调用之间缓存数组,速度会快很多。
  • 这是随机顺序选择的代码,正好 3 个正确答案。我对吗?我需要别的东西。例如。随机化 5 个问题,每个问题随机化 3 个答案,其中随机数(但至少一个)是正确的
  • @TomTom 我喜欢你的回答——非常感谢。但是还有其他更简单的方法吗?
  • 好的。请您提供准确的表格结构。
  • @TomTom "...TOP 3...WHERE isCorrect = 1" 不只选择正确的答案???你确定?
【解决方案2】:

所以你想做一个多项选择的事情,并显示 x out of y 答案在哪里,在那些 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() 对性能不会很不利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2019-08-07
    相关资源
    最近更新 更多