我正在研究MCQ模块,我需要从我的数据库中获取随机问题。问题是我似乎得到了重复。
答案 0 :(得分:6)
听起来你想要改变问题,而不是随机访问它们。所以你的算法会是这样的。
答案 1 :(得分:6)
如果您是从数据库中提取它们,请使用SQL来完成您的工作。例如提取20个随机问题(不重复):
SELECT * FROM questions ORDER BY RAND() LIMIT 20
答案 2 :(得分:1)
如果您使用的是MySql并且数据量合理,则可以使用ORDER BY RAND()
答案 3 :(得分:0)
如果没有更多信息,我可以建议一个基本的解决方案。 (但请用更多信息更新您的问题)
我猜你有用户,因为那时你可以保存到一个表中(无论是暂时的还是不是),用户已经得到了什么问题。
如果您没有用户,可以使用SESSION_ID
作为该用户的用户标识符。
因此,当您第一次提取问题并且用户回答问题时,它会保存您需要保存的信息,然后将用户的ID和问题的ID保存到表格中。
在提取下一个问题时,您会检查用户是否在此新表中包含该问题ID。
答案 4 :(得分:0)
请参阅Do stateless random number generators exist?
任何序列的伪随机数最终都会重复。你如何获得伪随机数?
答案 5 :(得分:0)
如果您有非常多的行,您可以在表中添加一列,该列存储0到1之间的数字,然后使用查询进行提取:
SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20
这意味着您的数据库不必随机命令整个表只提供20行。