Mysql 按特定值排序,然后旋转其余部分

Mysql 按特定值排序,然后旋转其余部分,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有一个疑问: SELECT * FROM Users; 我从哪里回来 id name ... 1 ... 2 ... 3 ... 4 ... 现在,我想要的是根据id对我得到的结果进行排序,并根据id旋转顺序。 例如,假设我想根据ID=3进行排序。我想要的是: id name ... 3 ... 4 ... 1 ... 2 ... 这可以直接在MySQL中实现吗,或者我必须在服务器端实现吗

我有一个疑问:

SELECT * FROM Users;
我从哪里回来

 id    name  ...
 1     ...
 2     ...
 3     ...
 4     ...
现在,我想要的是根据id对我得到的结果进行排序,并根据id旋转顺序。 例如,假设我想根据ID=3进行排序。我想要的是:

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

这可以直接在MySQL中实现吗,或者我必须在服务器端实现吗?

您可以使用

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

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

您可以使用

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

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

您可以对两列进行排序,第一列仅在id>=3时填写:

第一列按-id排序,因此我们可以按降序排序,其中null位于末尾


您可以对两列进行排序,第一列仅在id>=3时填写:

第一列按-id排序,因此我们可以按降序排序,其中null位于末尾

我只想:

SELECT * FROM Users ORDER BY id<3,id
我只想:

SELECT * FROM Users ORDER BY id<3,id

如果用户被删除,count*不大于最大id。在maxid上排序会起作用。如果用户被删除,count*不大于最大id。在maxid上排序会起作用。按-id desc排序允许SQL使用索引吗?按-id desc排序允许SQL使用索引吗?嗯,不应该是:id<3,id?id小于3的所有记录中的顺序,其余的将不可预测。@samuil yes。。。这是我写的:-就像一个魅力。仅仅-我不确定是否有可能说服mysql使用这个顺序的索引。解释显示此查询的索引、文件排序。谢谢。我已经尝试了所有答案,而这一个似乎是最简单的解决方案。就性能而言,所有答案都表现得同样好,至少在phpmyadmin profiler中是如此。虽然我没有太多的评测经验。@dadord:据我所知,由于缺乏索引,这个查询可能会遇到大数据集的问题。请记住,如果您的数据集增长过多,那么它可能值得一看。嗯,它不应该是:id<3,id?id小于3的所有记录中的顺序,其余的将不可预测。@samuil yes。。。这是我写的:-就像一个魅力。仅仅-我不确定是否有可能说服mysql使用这个顺序的索引。解释显示此查询的索引、文件排序。谢谢。我已经尝试了所有答案,而这一个似乎是最简单的解决方案。就性能而言,所有答案都表现得同样好,至少在phpmyadmin profiler中是如此。虽然我没有太多的评测经验。@dadord:据我所知,由于缺乏索引,这个查询可能会遇到大数据集的问题。请记住,如果您的数据集增长过多,可能值得一看。