簡體   English   中英

我的SQL按2個字段排序,每次更改一個字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM