Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 来自sql server的随机问题_Sql Server_Random - Fatal编程技术网

Sql server 来自sql server的随机问题

Sql server 来自sql server的随机问题,sql-server,random,Sql Server,Random,我正在做一个调查申请。我有一个sql server数据库,其中包含多达3000个调查问题。 我打电话给数据库询问一组10个问题。我必须确保在尽可能长的时间内不重复任何问题。 在这里我能采取的最好的方法是什么?编写自定义随机化算法或SQL server提供一些功能 您能简单地跟踪检索到的最后一个问题id吗。然后总是用比上一个更高的id检索下一个问题。如果没有返回任何内容,则获取第一个/最低的 它不会很好地扩展,但是听起来你不需要扩展 SELECT question_id FROM question

我正在做一个调查申请。我有一个sql server数据库,其中包含多达3000个调查问题。 我打电话给数据库询问一组10个问题。我必须确保在尽可能长的时间内不重复任何问题。
在这里我能采取的最好的方法是什么?编写自定义随机化算法或SQL server提供一些功能

您能简单地跟踪检索到的最后一个问题id吗。然后总是用比上一个更高的id检索下一个问题。如果没有返回任何内容,则获取第一个/最低的

它不会很好地扩展,但是听起来你不需要扩展

SELECT question_id
FROM questions 
ORDER BY NEWID()
以随机顺序提供所有问题ID。存储列表,然后一路往下看

在不存储订单的情况下,无法确保重复之间的最长时间。你可以在同一张表上做另一列

编辑:Jacques先生想法的变体:

一个名为random的列怎么样?按如下顺序洗牌:

update questions set random = (
    SELECT question_id
    FROM questions 
    ORDER BY NEWID()
)
然后按如下方式回答每个新问题:

select * where random = 'prev_question_id';

然后你可以每隔一段时间洗牌一次,也许是每晚。

事实上,获得一个随机集只是问题的一半。您真正想要的是一个新的随机集,其中包含以前未选择的条目


下面是杰夫·阿特伍德(Jeff Atwood)的一篇文章,其中谈到了可能会帮助您解决问题的洗牌:以及一篇后续文章。

您可以根据问题本身的随机生成器和频率计数器组合来选择问题

如果您总是需要10个问题,请从一组使用频率最低的问题开始,然后应用随机数生成器从该问题集中选择。增加这些问题的频率。这些最近提出的问题的频率比池中其他问题的频率高,因此在下一个过程中会忽略这些问题


这一过程将继续进行,直到您将所有问题转移到下一个频率,整个问题库将再次可用

这听起来像是家庭作业。。如果重点真的是确保问题在绝对必要之前不会重复,那么我建议添加一列或另一个带有TimesUsed字段的表

首先,您将拥有所有3000条记录,使用的时间为0。抓住前10名

选择使用时间最多的10个问题=从问题中选择使用的最小时间

并更新表格,将这些问题的TimesUsed设置为TimesUsed+1

这是一个简单的方法,如果你的问题数量不能被10整除,你需要考虑,但我将把这个留给你:


当然,如果你不死板地要求在所有问题都被使用之前不重复一个问题,那么这一切都无关紧要。

我想,如果有3000个问题,那么在再次显示问题之前,最好有2999个问题的间隔,以确保所有问题都不会重复最长时间。如果你遵循这个逻辑,直到得出结论,你很快就会意识到问题第一次是随机的,但之后又以同样的顺序循环,这可能与你说随机的意思不完全一样。因此,必须削弱其中一项或两项要求。是哪一个?马克,是的,我第一次传球时会有3000道独特的问题,但当我重复这个循环时,我不需要相同的顺序,我需要它们被随机洗牌。这并不能确保问题不会在尽可能长的时间内重复,根据OP。道歉;我提交的有点太快了-希望这现在更有意义