MySQL在随机结果中随机化

时间:2016-01-30 04:05:03

标签: mysql

好的,假设我有以下表

=================
gr         name
=================
A          John
A          Mary
A1         Jack
A1         Stephen
A          Jess
A2         Neil
A2         Chris

我想做的是使用一条规则随机获得订单结果,A1应该坚持A1(按随机顺序),A2应该坚持A2(按随机顺序)。

=================
gr         name
=================
A          Mary
A2         Chriss
A2         Neil
A          Jess
A          John
A1         Stephen
A1         Jack

群组名称为免费,如果您能提供更好的群组名称,请随时使用。

感谢。

编辑 对于那些好奇的人,我想要创建的是在线测验。它将以随机顺序呈现问题以最小化作弊。使用一条规则,带有段落文本的问题应该相互粘贴(按随机顺序),这样学生就不必多次阅读同一段落。

"段落分组问题"在其他非段落问题中随机排列。

如果你有更好的想法,请随时回答。

我找到了这个链接: MySQL order by rand() grouped by day

我认为我的案子与他的情况类似。只是他想选一个,我想选择ALL。

我试过的另一个问题

SELECT * FROM `tbl` ORDER BY gr, rand()

它能够随机化名称列,并且gr彼此粘在一起。我留下了一个问题,如何随机化gr列的顺序,同时仍然使A1,A2,相互粘贴

2 个答案:

答案 0 :(得分:1)

这是另一种方法。诀窍是在A1和A2的开头生成2个随机数,并在排序中使用它们:

select a.*
from tbl a
join (select @a1:=rand(), @a2:=rand()) b
order by case gr 
         when 'A1' then @a1
         when 'A2' then @a2
         else rand() end, rand();

fiddle

答案 1 :(得分:0)

我会做那样的事情:

SELECT 
    T.*
FROM 
    TBL T
    INNER JOIN (
        SELECT 
            GR, 
            RAND() AS R
        FROM 
            (SELECT DISTINCT GR FROM TBL) X
    ) T2
        ON T.GR = T2.GR
ORDER BY 
    T2.R,
    RAND()