Mysql 试题的SQL自定义排序顺序

Mysql 试题的SQL自定义排序顺序,mysql,sql,sorting,Mysql,Sql,Sorting,对于我目前正在进行的一个项目,我需要创建一个按特定顺序排序的问题列表,我目前不确定如何在SQL中做到这一点,我希望有人能够提供帮助 我有一个问题列表,我希望能够按照难度的顺序对它们进行排序,中等难度,简单难度,但问题是,如果我们有一个6个问题的列表,每个难度级别有2个,那么顺序应该是这样的 Medium, Easy, Hard, Medium, Easy, Hard 如果我们有八个问题分为: Easy x 3 Medium x 3 Hard x 2 它们需要看起来像: Medium, Eas

对于我目前正在进行的一个项目,我需要创建一个按特定顺序排序的问题列表,我目前不确定如何在SQL中做到这一点,我希望有人能够提供帮助

我有一个问题列表,我希望能够按照难度的顺序对它们进行排序,中等难度,简单难度,但问题是,如果我们有一个6个问题的列表,每个难度级别有2个,那么顺序应该是这样的

Medium,
Easy,
Hard,
Medium,
Easy,
Hard
如果我们有八个问题分为:

Easy x 3
Medium x 3
Hard x 2
它们需要看起来像:

Medium,
Easy,
Hard
Medium,
Easy,
Hard
Medium,
Easy
我开始认为这更可能是PHP的工作,而不是SQL,但如果有人有任何建议,我将不胜感激

编辑:使用MySQL/PHP

谢谢,
Colin

这可以使用行号系统来完成。如果您使用的是MSSQL,您可以使用ROW_NUMBER,您提到使用PHP,所以您可能使用的是MySQL,我对MySQL不太熟悉,无法为该平台提供解决方案

首先,我们按难度对数据进行划分,并分配它们自己的行号,然后按生成的行号排序,然后按难度排序,如下所示:

CREATE TABLE Questions (
    QuestionData ...,
    Difficulty nvarchar(10)
)

SELECT
    QuestionData,
    Difficulty,
    (
        CASE
            WHEN Difficulty = 'Medium' THEN 1
            WHEN Difficulty = 'Easy'   THEN 2
            ELSE                            3
        END
    ) AS DifficultyInt,
    ROW_NUMBER() OVER ( PARTITION BY Difficulty ORDER BY QuestionData ) AS RowNumber
FROM
    Questions
ORDER BY
    DifficultyInt
我在SQl Server中创建了一个使用行号的

SELECT DIFFICULTY, ROW_NUMBER() OVER (PARTITION BY DIFFICULTY ORDER BY DIFFICULTY) AS RN
FROM TABLE1  
ORDER BY CASE DIFFICULTY WHEN 'MEDIUM' THEN 1 
                         WHEN 'EASY' THEN 2 
                         WHEN 'HARD' THEN 3 END, RN 

谢谢你的建议。。。从你对MSSQL的回答中,我已经做了一些研究,并为MySQL提出了一个解决方案,我认为这应该符合要求

SELECT    DIFFICULTY,
          @num := if(@type = DIFFICULTY, @num + 1, 1) as row_number,
          @type := DIFFICULTY as dummy
FROM      Table1 t
ORDER BY  row_number, CASE DIFFICULTY WHEN 'MEDIUM' THEN 1 
                         WHEN 'EASY' THEN 2 
                         WHEN 'HARD' THEN 3 END

请参阅

我的道歉,我应该提到我正在使用MySQL。。。当我在MySQL上尝试你的sqlfiddle时,它出错了,但可能我使用了相同的概念。我很抱歉没有提到我正在使用MySqlFiddle。我只是在玩sqlfiddle时注意到,排序应该首先是RN,然后是case语句,以获得正确的顺序,以防其他人看到这个答案。选择难度,按难度划分的行数,按难度排序,如表中的RN,按RN排序,案例难度为“中等”,1为“容易”,2为“困难”,3为结束感谢@Hannover First