好的,假设我有以下表
=================
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,相互粘贴
答案 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();
答案 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()