我有一个包含 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 应按升序排列。
SELECT * FROM user ORDER BY IF(id=3 OR id=5, id, ~id) ASC
像这样的东西:
order by
case
when id = 3 then 999
when id = 5 then 998
else id
end desc
这假设您确实没有超过 8 行。否则,您必须更改将 3 和 5 移到顶部的“魔术”数字。
我认为这里的诀窍是使用枚举。
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
在 MySQL 中,有一个函数称为FIELD
* 如果在列表中找不到值,则返回零,例如,
SELECT *
FROM tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC