php - My SQL 按 2 个字段排序,每次更改一个字段

标签 php mysql sql

我有一个如下所示的表格:

有 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/

相关文章:

sql - 如何在 VBA 逗号分隔列表中仅将引号放在字符串(而不是数字)上?

php - 讨论 MySQL 数据库结构

php - 向 WordPress 中的所有 url 添加一些参数

php - 工具集表中的第一行具有黑色背景

php - 从多个表中检索记录 MySQL

php - 按值从 mysql_query 结果过滤数组

sql - 如果一个不相关的子查询在查询中的几个地方重复出现,是否可以缓存它并重用结果?

sql - Oracle 更新中神秘的笛卡尔积

MySQL标记问题: how to select an item that has been tagged as X, Y和Z?

php - SQL where 子句给出空结果