我有一个包含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应按升序排列。
答案 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