困难随机

时间:2013-01-06 12:48:42

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

如何(甚至逻辑地)随机至少一个,例如来自数据库的Id是否已指定列值?

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

非常感谢你的建议帮助!

2 个答案:

答案 0 :(得分:2)

请查看this为多个数据库执行此操作。

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

答案 1 :(得分:1)

所以你想要做出多项选择,并在 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()对性能来说不是很糟糕。