1

我有这个查询:

SELECT * FROM Users;

我回来的地方

 id    name  ...
 1     ...
 2     ...
 3     ...
 4     ...

现在,我想要的是根据 id 对我返回的结果进行排序,并以此为基础轮换顺序。例如,假设我想根据 ID=3 进行排序。我想要回来的是:

 id    name  ...
 3     ...
 4     ...
 1     ...
 2     ...

这可以直接在 MySQL 中进行,还是我必须在服务器端进行?

4

3 回答 3

3

我觉得很简单:

SELECT * FROM Users ORDER BY id<3,id
于 2012-11-25T09:47:37.610 回答
1

您可以通过使用来实现这一点

ORDER BY CASE 
    WHEN id < 3 THEN id + (SELECT MAX(id) FROM users) 
    ELSE id 
END

但请注意,mysql 将无法使用索引进行该排序。我认为在 SQL Server 之外进行这种轮换是最实用的解决方案。

于 2012-11-25T09:41:42.983 回答
1

您可以对两列进行排序,第一列仅在以下情况下填充id >= 3

order by
    case 
    when id >= 3 then -id
    end desc
,   id

第一列是排序的,-id所以我们可以降序排序,null最后是哪里。

SQL Fiddle 上的实时示例。

于 2012-11-25T09:43:50.290 回答