6

我有一个包含 8 条记录的用户表。我想根据字段id(即该表的主键)按降序排列数据,但 id 3 和 5 除外。所以最终结果应该是

id  name
--  ----
3   peter
5   david
8   john
7   stella
6   jim
4   jack
2   nancy
1   scott

除了 id 3 和 5 其余数据应按降序排列,3 和 5 应按升序排列。

4

4 回答 4

7
SELECT * FROM user ORDER BY IF(id=3 OR id=5, id, ~id) ASC
于 2013-01-16T12:29:05.740 回答
6

像这样的东西:

order by 
   case 
     when id = 3 then 999
     when id = 5 then 998
     else id
   end desc

这假设您确实没有超过 8 行。否则,您必须更改将 3 和 5 移到顶部的“魔术”数字。

于 2013-01-16T12:28:35.790 回答
1

我认为这里的诀窍是使用枚举。

SELECT id, name FROM my_table WHERE id IN (3, 5) ORDER BY ASC
UNION
SELECT id, name FROM my_table WHERE id NOT IN(3, 5) ORDER BY DESC
于 2013-01-16T12:29:05.427 回答
1

在 MySQL 中,有一个函数称为FIELD* 如果在列表中找不到值,则返回零,例如,

SELECT *
FROM   tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC
于 2013-01-16T12:50:37.377 回答