我有一个如下所示的表格:
有 100 个问题。
Table Structure for "Questions Table":
title:
answerA:
answerB:
answerC:
answerD:
category:
difficulty:
每个问题可以有 5 个类别之一(“1、2、3、4 或 5”)和 3 个难度级别中的 1 个(“简单、中等或困难”)。
目前我正在按类别对它们进行随机排序,如下所示:
"SELECT * FROM Questions order by category, rand()";
现在问题已按类别排序并随机化。
我希望每个类别的结果也具有不同的难度级别。
所以像这样:
question 1 , category 1, difficulty easy
question 3 , category 1, difficulty medium
question 4 , category 1, difficulty hard
question 2 , category 1, difficulty easy
question 5 , category 2, difficulty easy
question 6 , category 2, difficulty medium
question 7 , category 2, difficulty hard
question 2 , category 2, difficulty easy
question 8 , category 3, difficulty easy
question 10, category 3, difficulty medium
question 9 , category 3, difficulty hard
question 0 , category 3, difficulty easy
等等。
我将如何复制上述内容? 看来我在排序中需要 2 个标准,并且每次为新类别打印问题时都需要更改难度标准。
我发现的大多数 Google 结果都与按 2 个字段进行分类但顺序相同。
最佳答案
好的。因此,对于这样的订单,我们需要 grouped rank第一:
(SELECT title, category, difficulty,
@rank:=CASE
WHEN @category <> category OR @difficulty <> difficulty
THEN 0
ELSE @rank+1 E
ND AS rn,
@difficulty = difficulty,
@category = category
FROM
(SELECT @rank:= -1) s,
(SELECT @category:= -1) c,
(SELECT @difficulty:= -1) d,
(SELECT *
FROM questions
ORDER BY category, difficulty, rand()
) t) as q
这为我们创建了一个表格,其中每个问题都有其在类别中的排名。现在我们来排序一下:
SELECT *
FROM (...) as q
ORDER BY category, rn, CASE
WHEN difficulty = 'easy'
THEN 1
WHEN difficulty = 'medium'
THEN 2
ELSE 3
END;
关于php - My SQL 按 2 个字段排序,每次更改一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483539/