2017-10-20 79 views
0

我必须为学校做一个测验,并且将所有的问题都存储在一个MySQL表中(使用数据库是项目的一个需求。)有什么办法吗?可以随机化表格记录的顺序,这样我就可以在必要时轻松地将它们拖入java程序中,只需从顶部开始并向下工作,而不必随意选择一个随机的副本并冒着重复的风险?我如何随机化MySQL表的顺序

+0

当您得到结果时,只需对数组进行洗牌就更简单了。后端是什么? – wast

+0

是的,我认为,但我有更多的问题在表中比在阵列中的位置。我已经解决了如何随机排列问题出现的顺序,但是当我将它们输入到数组中时,它始终只是表格顶部的前几个问题。 – Darragh

+0

尝试ORDER BY RAND()? – wast

回答

0

我可以看到多种方式来处理您的问题,但需要更多的用例信息来猜测它们的可行性。

第一个想到的是将已经选择的问题与客户端ID一起写入另一个表中。所以当你选择下一个问题时,你可以简单地排除那些已经在另一个表中的问题。

要对表格“重新排序”,最简单的方法是简单地添加一个排序列。

我的表看起来像这样:

CREATE TABLE `questions` (
    `questionId` int(11) NOT NULL AUTO_INCREMENT, 
    `question` varchar(1000) NOT NULL, 
    `sort` varchar(36) DEFAULT '', 
    PRIMARY KEY (`questionId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

sort列将包含的UUID,所以很可能不会冲突。

现在,更改顺序,我只是更新与新的那些的UUID:

UPDATE questions SET sort = uuid() ORDER BY rand(); 

要选择一些问题,只需使用该列命令的结果。当你有很多的问题

SELECT questionId, question FROM questions ORDER BY sort; 

sort列的index可能是有用的,说成千上万。我想它会很快没有一个。

而不是UUID您也可以使用一些较少耗费空间的数据,它只需要是相对随机的。