我有这个查询:
SELECT * FROM Users;
我回来的地方
id name ...
1 ...
2 ...
3 ...
4 ...
现在,我想要的是根据 id 对我得到的结果进行排序,并基于此旋转顺序。例如,假设我想根据 ID=3 进行排序。我想要回来的是:
id name ...
3 ...
4 ...
1 ...
2 ...
这是可以直接在MySQL中实现的,还是我必须这样做?
我认为很简单:
SELECT * FROM Users ORDER BY id<3,id
您可以对两列进行排序,第一列仅在id >= 3
时填充:
order by
case
when id >= 3 then -id
end desc
, id
第一列按-id
排序,因此我们可以降序排序,其中null
在末尾。
SQL Fiddle的现场示例。
您可以使用
ORDER BY CASE
WHEN id < 3 THEN id + (SELECT MAX(id) FROM users)
ELSE id
END
但请注意,MySQL 将无法使用 Index 进行该排序。我认为在SQL服务器之外进行这种轮换是最务实的解决方案。