[英]My SQL order by 2 fields with one field changing each time
我有一個看起來像這樣的表:
有100個問題。
Table Structure for "Questions Table":
title:
answerA:
answerB:
answerC:
answerD:
category:
difficulty:
每個問題可以具有5個類別中的1個(“ 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個字段進行排序但順序相同有關。
好的。 因此,按照這樣的順序,我們首先需要分組排名 :
(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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.