Mysql - 按 2 级排序

标签 mysql sql-order-by

我有一个项目表。项目有 id,分数 1,分数 2。

我想选择 12 个已知项目(使用 WHERE id IN (....)),并按分数对它们进行排序,该分数是 Score1 和 Score2 的排名之和。如果 12 个项目按分数排序,则排名是分数的位置。

如何在 mysql 中执行此操作?

编辑:

在 4 个答案之后,我发现解决方案可能比我预期的更复杂。所以让我以另一种方式问这个问题。

如果我使用select *, [calculation] from table where id IN (有序的id列表)。我可以以某种方式使用 [calculation] 中原始有序 id 列表中每个 id 的位置吗?

最佳答案

在我的脑海中:

CREATE TEMPORARY TABLE t_1(score_1_rank INT AUTO_INCREMENT, id)
CREATE TEMPORARY TABLE t_2(score_2_rank INT AUTO_INCREMENT, id)

INSERT INTO t_1(id)
SELECT id
FROM items i
WHERE id IN () 
ORDER BY score_1

INSERT INTO t_2(id)
SELECT id
FROM items i
WHERE id IN ()
ORDER BY score_2

SELECT ...
FROM   items i
INNER JOIN t_1 t1
  ON t1.id = i.id
INNER JOIN t_2 t2
  ON t2.id = i.id
ORDER BY t1.rank + t2.rank

我是否正确理解了您的请求?

关于Mysql - 按 2 级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1097636/

相关文章:

MySQL - 以编程方式设置列顺序

MySQL - 范围条件和排序依据

php - 从php的存储文件夹中删除图像

php - Mysql表字段值作为php数组中的索引用于更新语句

mysql - ORDER BY datetime 使查询非常慢

MySQL 在排序/排序后获取以特定 id 开头的行

MySQL - ORDER BY 与 UNION 的一部分

mysql存储过程: flow control

MYSQL无法识别某些特殊字符

php - MYSql ORDER BY CASE 第一个 CASE 应按 ID 数组排序