按特定顺序排列数据

时间:2013-01-16 12:26:08

标签: mysql sql

我有一个包含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 个答案:

答案 0 :(得分:7)

SELECT * FROM user ORDER BY IF(id=3 OR id=5, id, ~id) ASC

答案 1 :(得分:6)

类似的东西:

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

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

SELECT *
FROM   tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC